请教坛友,这里是变量的问题还是公式的问题。

2020-01-12 17:29发布

dataBUF_1[4]=49;
dataBUF_1[5]=50;
dataBUF_1[6]=51;
dataBUF_1[7]=52;

                         if(dataBUF_1[0]==0xfd)
                         {
                          if(dataBUF_1[1]==0x0b)
                          {
                                        cunchushu=((dataBUF_1[4]-48)*1000)+ ((dataBUF_1[5]-48)*100)+(dataBUF_1[6]-48)*10+(dataBUF_1[7]-48);
                                       
                       
                                }
                               
                               
                        }
          //cunchushu=1234;
上面这段程序,打开屏蔽的最后一行正确,屏蔽最后一行出错,也就是说变量在计算的过程中变了数字。打开屏蔽的最后一行cunchushu是对的,怎么验证都对。这里倒底是变量变了还是公式问题?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
flash3g
1楼-- · 2020-01-13 07:07
lcw_swust 发表于 2019-6-11 16:40
dataBUF_1是char型?
估计到后面*1000时就溢出了,可写成 (unsigned long)dataBUF_1
也就是强制类型转换。 ...

我记得计算结果好像会提升到“cunchushu”的数据类型
flash3g
2楼-- · 2020-01-13 08:32
lcw_swust 发表于 2019-6-11 16:45
具体的我也不清楚,根据经验,算式 x*y 的结果与 x 的类型相同,x为char那么结果也为char。 ...

https://blog.csdn.net/u010815257/article/details/50178499        c语言隐式转换规则

正确应该是,按参与运算的数据类型提升
zhaoyuanxian
3楼-- · 2020-01-13 12:53
 精彩回答 2  元偷偷看……
ZHAOBAO511
4楼-- · 2020-01-13 14:27
flash3g 发表于 2019-6-11 17:51
https://blog.csdn.net/u010815257/article/details/50178499        c语言隐式转换规则

正确应该是,按参与运 ...

谢谢!cunchushu是INT的。
ZHAOBAO511
5楼-- · 2020-01-13 20:08
zhaoyuanxian 发表于 2019-6-11 22:16
需要强制类型转换

谢谢回答!

一周热门 更多>