这里的问题非常简单。我有一个非常简单的程序,用于将两个数字相加并打印出这些数字的总和(如下)。运行程序时,它按预期工作并打印出 40 000 表示 20 000 + 20 000。但是当我将 int a、b 和 sum 更改为 short a、b 和 sum 时,我得到 -25 536 作为答案。谁能解释为什么会这样?我有一个想法,但很想听听知道它的人的意见。感谢阅读。
int a, b, sum;
a = 20000; b = 20000; sum = a+b;
printf("%d + %d = %d\n", a, b, sum);
最佳答案
在您的系统上,short
大概是 16 位,因此值的范围是 -32768
到 32767
。 20000 + 20000
大于最大值,因此这会导致溢出,从而导致未定义的行为。
如果更改为 unsigned short
,则范围变为 0
到 65525
,加法将起作用。此外,溢出是用 unsigned
整数定义的,它简单地使用模块化算法环绕,例如(unsigned short)65535 + 2 = 1
。
关于c - 添加两个短号码时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39281478/