标题: 想问下关于C语言16位整形变量强制转换成32位计算操作 [打印本页]

作者: zhl561    时间: 2019-6-17 17:38
标题: 想问下关于C语言16位整形变量强制转换成32位计算操作
如图,从数组里取出来的值经过计算不对!!关于变量的定义:
        u8 time1,time2, time3,time4;
        u16 time5,time6;
        u32 time7,time8,time9;
WORD是把8位转换成16位;




作者: suncat0504    时间: 2019-6-17 22:39
涉及到指针的操作了,一定要小心,指针指向什么类型,意味着占用存储空间的不同。不如char行占用一个单元(字节单位),两位的整形,占用两个单元。用指针赋值的时候,会根据指针的类型,从内存中取出对应长度的单元,组织成数据,然后赋值给接受对象。当有不同类型之间的赋值时,就涉及到自动转换的问题。小往大转,问题不大(但也涉及有符号时的出现问题)。大往小转,会丢数据。另外数据类型占用内存单元,还涉及高位、低位的存储顺序,这个也一定要考虑,很重要。
你想要正确的结果,不如直接用time5=time1*256+time2;类似这样的计算来得可靠。
作者: yzwzfyz    时间: 2019-6-18 08:23
写程序时应尽量回避不确定的因素,因为你不能确定编译平台是如何编译它的。
本例:如果先移位,后转换。则16位的数制,移不出个32位的结果,多余则溢出丢弃。
如果先转换,后移位则是可以的。
既然你不能确定,就分两步一定要处理,一步先转换,再一步进行移位。
学会规避不确定的因素,以保证正确率。
作者: zhl561    时间: 2019-6-18 09:14
suncat0504 发表于 2019-6-17 22:39
涉及到指针的操作了,一定要小心,指针指向什么类型,意味着占用存储空间的不同。不如char行占用一个单元( ...

谢谢大佬指教,我试试
作者: zhl561    时间: 2019-6-18 15:45
yzwzfyz 发表于 2019-6-18 08:23
写程序时应尽量回避不确定的因素,因为你不能确定编译平台是如何编译它的。
本例:如果先移位,后转换。则 ...

谢谢大佬指导





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1