24位补码转有符号整型的方法

电能芯片寄存器为何是24位有符号数据

因为ADC精度。我们需要用到ADC转换,常见的ADC精度有 24、12、10bit类型,且转换出的数据是补码形式。

如何将24位补码转换成有符号整型

计算机或单片机中,变量类型大多是8bit、16bit、32bit的。那该怎样把这些AD转换得到的补码转换成一个有符号的整数存放在一个有符号变量中呢?

计算机中数据本身就是补码存储,因此不需要强制转换。具体实现方法如下:

  1. 先举个简单的例子,转换1个5位类型的有符号数10011(-13),最高位1为符号位。

    5位源码十进制值8位类型char结果
    1 0011-131111 0011
    0 001130000 0011
    0 1101130000 1011

    上表可见,将5位类型数据直接存放在char类型的低位,剩余的高位用符号位扩展即可完成转换,前后值不变,可用于计算机直接参与运算。C语言具体算法,可用逻辑运算符实现。

    /*
    将32位以内位数的的数据转换为32位有符号类型
    参数:val--要转换的原始数据;
         bits--原数据的位数
    返回:32位有符号数,转换的结果
    */
    int32_t tran_to_int32(int32_t val, uint32_t bits)
    {
        val <<=(32-bits);   //将符号位左移到最高位,val已经和原数据符号一致
        val >>=(bits);      //右移,实现了符号为扩展,即将原数据的空余高位全部用符号位填充
        return val;
    }
    
    void main(void)
    {
        int32_t in24Val1,in24Val2;
    
        in24Val1 = 0x007F;
        in24Val2 = 0x107F;
        tran_to_int32(in24Val1 , 24);
        tran_to_int32(in24Val2 , 24);
    }
    
    

总结

将任意n位数的数据,存放在变量的低位,而空余的高位进行符号位扩展,就可以在不改变数据本身大小的情况下,实现将任意位数的数据存放到一个char、short int或int类型的变量中,使之可以被计算机解读成一个有符号的整数。

————————————————
版权声明:本文为CSDN博主「星水天河」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
[原文链接](将24位(任意位数)补码转换成有符号整数的方法_星水天河的博客-CSDN博客_24位补码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值