找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7097|回复: 4
收起左侧

想问下关于C语言16位整形变量强制转换成32位计算操作

[复制链接]
ID:386053 发表于 2019-6-17 17:38 | 显示全部楼层 |阅读模式
如图,从数组里取出来的值经过计算不对!!关于变量的定义:
        u8 time1,time2, time3,time4;
        u16 time5,time6;
        u32 time7,time8,time9;
WORD是把8位转换成16位;
11.PNG


回复

使用道具 举报

ID:517466 发表于 2019-6-17 22:39 | 显示全部楼层
涉及到指针的操作了,一定要小心,指针指向什么类型,意味着占用存储空间的不同。不如char行占用一个单元(字节单位),两位的整形,占用两个单元。用指针赋值的时候,会根据指针的类型,从内存中取出对应长度的单元,组织成数据,然后赋值给接受对象。当有不同类型之间的赋值时,就涉及到自动转换的问题。小往大转,问题不大(但也涉及有符号时的出现问题)。大往小转,会丢数据。另外数据类型占用内存单元,还涉及高位、低位的存储顺序,这个也一定要考虑,很重要。
你想要正确的结果,不如直接用time5=time1*256+time2;类似这样的计算来得可靠。
回复

使用道具 举报

ID:123289 发表于 2019-6-18 08:23 | 显示全部楼层
写程序时应尽量回避不确定的因素,因为你不能确定编译平台是如何编译它的。
本例:如果先移位,后转换。则16位的数制,移不出个32位的结果,多余则溢出丢弃。
如果先转换,后移位则是可以的。
既然你不能确定,就分两步一定要处理,一步先转换,再一步进行移位。
学会规避不确定的因素,以保证正确率。
回复

使用道具 举报

ID:386053 发表于 2019-6-18 09:14 | 显示全部楼层
suncat0504 发表于 2019-6-17 22:39
涉及到指针的操作了,一定要小心,指针指向什么类型,意味着占用存储空间的不同。不如char行占用一个单元( ...

谢谢大佬指教,我试试
回复

使用道具 举报

ID:386053 发表于 2019-6-18 15:45 | 显示全部楼层
yzwzfyz 发表于 2019-6-18 08:23
写程序时应尽量回避不确定的因素,因为你不能确定编译平台是如何编译它的。
本例:如果先移位,后转换。则 ...

谢谢大佬指导
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表