zoukankan      html  css  js  c++  java
  • c语言中,如果将无符号数转换为有符号数


    在使用ti的adc芯片ads1259时,芯片是24为数据格式保存的,其中最高位是符号位,因此可以理解为是有符号数据,但是在嵌入式系统中,没有直接24位的变量,因此使用32的无符号先保存24位的数据。


    如果最高位不是1,那么很简单,直接乘以lsb对应的电压,即可得到真实的电压值。


    如果最高位1,说明是有符号的,因此,我们用无符号的32位保存的时候需要进行转换,其实,学过计算机基础的就知道补码的原理,在ads1259中,0xffffff是最小值-1,0x800000是负的最大值(这里说的是绝对值)。假如我们得到0x00A12CC8,说明是负值,那么如何转换到有符号的数据呢?


    c语言中有如下方法:

    unsigned int ua = 0x00A12CC8;
    int ib = (int)(ua-0xffffff)-1;
    int ic = ua | 0xff000000;
    printf("ib = %d 0x%x
    ",ib, ib);
    printf("ic = %d 0x%x
    ",ic, ic);
    输出的值如下
    ib = -6214456 0xffa12cc8
    ic = -6214456 0xffa12cc8
    

     那么吧ic或ib两个值保存乘以lsb对应的电压,保存到float变量中,就得到了负的电压值。

    当然,数据保存,格式转换要注意不能溢出。

  • 相关阅读:
    要坚持的好习惯
    Attribute与Property关系
    浅谈ES6中super关键字
    JS权威指南读书笔记(七)
    JS权威指南读书笔记(六)
    JS权威指南读书笔记(五)
    JS权威指南读书笔记(四)
    函数
    对象
    数值
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11739478.html
Copyright © 2011-2022 走看看