【发布时间】:2014-12-26 13:17:52
【问题描述】:
代码是这样的:
short x=30;
short y=32760,z;
z= x+y;
int w= z*z;
cout<< " w = "<< w << " z= " << z;
输出如下: w = 1072300516 z= -32746
为什么会这样?
【问题讨论】:
-
max short 是 32768。你有一个溢出,导致 -32746。 int 大于 short,这就是 w 不溢出的原因
-
但是为什么是负号,为什么是这个随机值?背后有什么计算吗?
-
因为位表示。最高位指定该值是正数还是负数。例如,1001 为负数,0001 为正数。如果您的值已经很大(011111111)并且您添加了一个值,则会导致溢出导致负数(0111 + 0011 = 1010)
-
也请不要大喊大叫!!