《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) = 2
32位机器
sizeof(int) = 4
以上是 《C与指针》中遇到的代码片段问题 的全部内容, 来源链接: utcz.com/p/195550.html