请教坛友,这里是变量的问题还是公式的问题。
dataBUF_1=49;dataBUF_1=50;
dataBUF_1=51;
dataBUF_1=52;
if(dataBUF_1==0xfd)
{
if(dataBUF_1==0x0b)
{
cunchushu=((dataBUF_1-48)*1000)+ ((dataBUF_1-48)*100)+(dataBUF_1-48)*10+(dataBUF_1-48);
}
}
//cunchushu=1234;
上面这段程序,打开屏蔽的最后一行正确,屏蔽最后一行出错,也就是说变量在计算的过程中变了数字。打开屏蔽的最后一行cunchushu是对的,怎么验证都对。这里倒底是变量变了还是公式问题? dataBUF_1是char型?
估计到后面*1000时就溢出了,可写成 (unsigned long)dataBUF_1
也就是强制类型转换。 lcw_swust 发表于 2019-6-11 16:40
dataBUF_1是char型?
估计到后面*1000时就溢出了,可写成 (unsigned long)dataBUF_1
也就是强制类型转换。 ...
谢谢!可能是这里问题,之前没问题,就后来乘了1000后有问题,话说这个乘了1000还存在这个变量里面? ZHAOBAO511 发表于 2019-6-11 16:42
谢谢!可能是这里问题,之前没问题,就后来乘了1000后有问题,话说这个乘了1000还存在这个变量里面? ...
具体的我也不清楚,根据经验,算式 x*y 的结果与 x 的类型相同,x为char那么结果也为char。 lcw_swust 发表于 2019-6-11 16:45
具体的我也不清楚,根据经验,算式 x*y 的结果与 x 的类型相同,x为char那么结果也为char。 ...
谢谢!找到原因了,缓存计数没清零。 楼主用的是汉语拼音大法 carefree1986 发表于 2019-6-11 17:05
楼主用的是汉语拼音大法
{:handshake:} 你厉害,这都被你看出来了,中英文都用。 lcw_swust 发表于 2019-6-11 16:40
dataBUF_1是char型?
估计到后面*1000时就溢出了,可写成 (unsigned long)dataBUF_1
也就是强制类型转换。 ...
我记得计算结果好像会提升到“cunchushu”的数据类型 lcw_swust 发表于 2019-6-11 16:45
具体的我也不清楚,根据经验,算式 x*y 的结果与 x 的类型相同,x为char那么结果也为char。 ...
https://blog.csdn.net/u010815257/article/details/50178499 c语言隐式转换规则
正确应该是,按参与运算的数据类型提升 需要强制类型转换 flash3g 发表于 2019-6-11 17:51
https://blog.csdn.net/u010815257/article/details/50178499 c语言隐式转换规则
正确应该是,按参与运 ...
谢谢!cunchushu是INT的。 zhaoyuanxian 发表于 2019-6-11 22:16
需要强制类型转换
谢谢回答!
页:
[1]