一个简单的C语言编程问题
时间:10-02
整理:3721RD
点击:
unsigned int num;
num=1377*100/2755;
我这样写的话num值二极管输出为2。
但是我如果写
num=137700/2755;
这样num值就输出50。
求教为什么会这样?
num=1377*100/2755;
我这样写的话num值二极管输出为2。
但是我如果写
num=137700/2755;
这样num值就输出50。
求教为什么会这样?
num=1377*100/2755;
先进行乘法运算,CPU应该进行的是int型(16位)的乘法运算: 1377 * 100 = 137700 = 0x219E4,
这个结果超出int型(16位:0xFFFF)的表示范围,数据溢出了,
无符号数截取低位,乘法得到的结果其实是 0x19E4 = 6628.
再进行除法运算 6628 / 2755 = 2.40,结果取整,所以得到结果为2
num=137700/2755;
编译器将 137700 处理为long型(32位:0xFFFF FFFF),没有超出数据类型的表示范围。
因此两个数进行除法运算,不会超出范围。
修改式1的方法,使用数据类型强制转换,将1377强制转换为long型后,再进行运算:
num=(long)1377*100/2755;
在不同系统下,各种数据类型的位长不一样,能表示的数据范围也就不同的。要注意一下
您好;我想问下为什么在第二个num哪里会处理成long int的呢?