找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 7605 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-6-17 17:38

正文摘要:

如图,从数组里取出来的值经过计算不对!!关于变量的定义:         u8 time1,time2, time3,time4;         u16 time5,time6;      ...

回复

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

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

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

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

Powered by 单片机教程网

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