《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

回到顶部