整形数据之间的强制转换

在计算机系统中,整形数据一律用补码来存储,其原因在于,使用补码可以将符号位和数据位统一处理,与此同时,加法和减法也可以统一处理。

1)正数的原码、反码和补码相同;
2)负数的反码:原码的符号位不变,数据位按位取反;
3)负数的补码:反码+1(如果+1后要进位,要一直往前进位,包括符号位)。

在DSP中的测试代码如下:

// Initialization
uint16_t test1 = 10;
int16_t test2 = -10;
uint16_t test3 = 65000;

// Update data
test1 = (uint16_t)test2;
test2 = (int16_t)test3;

测试结果如下:
这里写图片描述

分析:
10、-10以及6500三个数在计算机存储单元里的存储格式如下表所示,从该表不难看出,将-10强制转换为uint16_t格式后,转换后的数据应为65526,与上述测试结果一致。同理,将65000强制转换为int16_t格式后,转换后的数据应为-536,与测试结果一致。
这里写图片描述

总之,不同类型的整形数据之间的强制转换归根到底就是一条:按存储单元中的存储格式直接传送。因而,对于交流信号,负数通过Modbus通信传送给上位机显示时,在DSP中可以先强制转换为uint16_t格式,然后上位机程序再强制转换为int16_t格式即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值