《C与指针》中遇到的代码片段问题
如下代码:
int a = 5000;int b = 25;
long c = a * b;
书上说该乘法运算在16位机器上会产生溢出,请问为什么?实在想不通。
书上原样:
回答:
5000 * 25= 125000,16位的int能表达的最大正数是32767,所以乘法的结果超出正整数最大值上溢出。
假定int采用截断的方法处理结果,125000的16进制数为1E848,只取后16bit,也就是4位16进制数,c=0xE848,而0xE848在16位int机器上表示0x-17B8,转换为十进制为-6072,因此最终得到的c的初始化值是错误的。
回答:
25*5000=125000,16位只支持最大2^16-1=65535,当然溢出啊!
回答:
16位机器:
sizeof(int) = 232位机器
sizeof(int) = 4以上是 《C与指针》中遇到的代码片段问题 的全部内容, 来源链接: utcz.com/p/195550.html

