先上程序
这段程序的计算结果是
下面解释一下为什么会出现错误的结果:
1,Test1 = (uTest-4760);的计算结果是-4760正确的,这是运算完之后直接赋值给了一个可以接收此负值的一个类型,没有出现问题。
2,Test2 = (uTest-4760)/10;这个计算结果就是-26691错误的,因为计算完 -4760后还有一个除法运算,这是就需要一个变量类型。
C语言把-4760自动提升为参与运算的最高级别的数据类型,也就是uTest所属的unsigned int类型,他需要把-4760强制转换成unsigned int后再去做除法运算,做完除法运算还要赋值给一个类型比自己小的short型,还要再进行一次类型转换。
最后结果就成了-26691。
3,uTest = (uint32_t)(uTest-4760);
Test3 = uTest/10;
这两步是我对2的一个验证。