在他的一次演讲中,道格拉斯·克罗克福德说,他有一些奇怪的属性,他继续说, 可以具有两个整数a和b,使得a> 1。 0,b> 0
c = a + b
我们最终可能会得到c< a或b<一个。 有人可以用一个例子解释这个。
答案 0 :(得分:2)
在c中,有一种情况会导致这种行为。(例如:有符号整数加法等)有符号整数溢出是未定义的行为。如果结果不是表达式类型的可表示值,则对表达式的求值会产生未定义的行为。在许多机器上,未定义的行为证明是事实 - 它会使c
为负(在签名加法的上下文中讨论)。这是有符号整数溢出。一个例子必须是
int a = INT_MAX;
int b = INT_MAX;
int c = a + b; //<--- overflow.
进一步深入研究很明显,在javascript的情况下,溢出行为被固定为该类型的最大值。所以你展示的场景很可能不是javascript。
在java溢出时,它会回到最小值并从那里开始。对于下溢,同样的情况发生但只达到最大值然后从那里开始。
答案 1 :(得分:1)
可能因为无法正确处理附加操作中的溢出条件。 在系统中说int占用2个字节的空间。 所以支持的范围是-32768到+32767或0到65535
a=65534,b=4;
c=a+b;
c=3.
b=65534,a=4;
c=a+b;
c=3.