Binary 在计算机中,为什么最大整数加一等于零?

Binary 在计算机中,为什么最大整数加一等于零?,binary,Binary,我想知道计算机中加法的过程 计算机如何添加两个数字?这是电子魔术吗?这是一个算法吗 另外,我想知道为什么在最大整数(…111)上加1会导致零(…000)?Asuming…111是该计算机体系结构中最大整数的二进制表示 谢谢。算术处理器就是这种情况,它对整数执行二的补码二进制算术。比如说,浮点数是不正确的,而在以其他方式(符号大小表示等)进行数学运算的少数计算机上也不一定是正确的 2的补码使硬件的某些事情变得容易,比如使用相同的逻辑实现一些有符号和无符号操作 请记住,值1111…1111表示2的补

我想知道计算机中加法的过程

计算机如何添加两个数字?这是电子魔术吗?这是一个算法吗

另外,我想知道为什么在最大整数(…111)上加1会导致零(…000)?Asuming…111是该计算机体系结构中最大整数的二进制表示


谢谢。

算术处理器就是这种情况,它对整数执行二的补码二进制算术。比如说,浮点数是不正确的,而在以其他方式(符号大小表示等)进行数学运算的少数计算机上也不一定是正确的

2的补码使硬件的某些事情变得容易,比如使用相同的逻辑实现一些有符号和无符号操作

请记住,值1111…1111表示2的补码下的-1,您希望-1增加到0


1111111..111“自然”归零。当您添加1时,1的进位会在数字中传播,导致每个数字都变为0,然后从数字中执行(在该数字中,它被丢弃,或用于设置溢出指示)。

它并不总是导致0。如果在most表示中使用有符号整数类型,则最终将得到最小值,从(例如)

在某些体系结构上——至少在某些模式下——这种溢出不会给出值,它会导致错误。当它给出一个值时,基本上还是二进制计数。假设您有一个8位无符号整数值。。。最后几个值是

 11111100
 11111101
 11111110
 11111111
接下来的逻辑步骤是进入下一位:

100000000
因此,计算机有效地做到了这一点——但随后丢弃了新的顶部位,只保留底部8位(因为它是8位类型)

不过,你不必使用电脑就能看到这种效果。假设你的车里有一个模拟里程表——那种有几个“轮子”的里程表。当您到达其范围的终点时,它只是环绕:

99997
99998
99999
00000 // Overflow!

加法过程与硬件相关,并在CPU中完成。 将1添加到最大整数将导致0 因为在二进制系统中,将1和1相加将导致0和1和下一个数字相加 因此,将1添加到11111
1+1=0,1移到下一个数字,依此类推

这是一个很好的答案。口若悬河,解释得很好,仍然简单易懂。做得好。Jon Skeet的答案是非常棒的,当然安全地考虑所有的现代体系结构都不会导致溢出,如果在值65535的未签名的短加上添加1,只会导致0。@ DojyID:这取决于语言,它是选项。例如,在C#中有一个“已检查”或“未检查”上下文的概念——在已检查上下文中,将抛出异常;在未检查的上下文中,它不会。
99997
99998
99999
00000 // Overflow!