我想知道计算机中的加法过程。
计算机如何将两个数相加?是电子魔法吗?是算法吗?
另外,我想知道为什么在最大整数 (...111) 上加 1 会导致零 (...000)?假设 ...111 是该计算机体系结构中 max int 的二进制表示。
谢谢你。
它并不总是导致 0。如果你在大多数表示中使用有符号整数类型,你最终会得到最小值,从(比如)
01111111 (127)
10000000 (-127)
Run Code Online (Sandbox Code Playgroud)
在某些架构上 - 至少在某些模式下 - 这种溢出不会给出值,它会导致错误。当它确实给出一个值时,它基本上仍然只是二进制计数。想象一下你有一个 8 位无符号整数值......最后几个值是
11111100
11111101
11111110
11111111
Run Code Online (Sandbox Code Playgroud)
那么合乎逻辑的下一步是进入下一位:
100000000
Run Code Online (Sandbox Code Playgroud)
所以计算机有效地做到了这一点 - 但随后丢弃了那个新的最高位,只保留了最低 8 位(因为它是一种 8 位类型)。
不过,您不必使用计算机来查看这种效果。假设您在汽车中有一个模拟里程表 - 那种有几个“轮子”的。当您到达其范围的末尾时,它只是环绕:
99997
99998
99999
00000 // Overflow!
Run Code Online (Sandbox Code Playgroud)