《C与指针》中遇到的代码片段问题

如下代码:

int a = 5000;
int b = 25;
long c = a * b;

书上说该乘法运算在16位机器上会产生溢出,请问为什么?实在想不通。

书上原样:图片描述

阅读 2.1k
3 个回答

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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进