添加两个短号时

Edd*_*ica 1 c variables int short

这里真的很简单.我有一个非常简单的程序,用于添加两个数字并打印出这些数字的总和(如下).当运行该程序时,它按预期工作,打印出40 000 20 000 + 20 000.但是当我改变a a,b和sum为 a,b和sum时,我得到-25 536作为答案.谁能解释为什么会这样?我有一个想法,但很想从知道它的人那里听到它.谢谢阅读.

int a, b, sum;

a = 20000;  b = 20000;  sum = a+b;
printf("%d + %d = %d\n", a, b, sum);
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

在您的系统,short大概是16位,所以值的范围是-3276832767.20000 + 20000比最大值大,所以这会导致溢出,从而导致未定义的行为.

如果更改unsigned short,范围变得065525,并增设会工作.另外,溢出是用unsigned整数定义的,它只是使用模运算包裹,例如(unsigned short)65535 + 2 = 1.