binary - 在计算机中,为什么最大整数加一会导致零?

标签 binary

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

计算机如何将两个数字相加?难道是电子魔法?它是一种算法吗?

另外,我想知道为什么将 1 添加到最大整数 (...111) 会导致零 (...000)?假设 ...111 是该计算机体系结构中 max int 的二进制表示形式。

谢谢。

最佳答案

它的结果并不总是 0。如果您在大多数表示中使用有符号整数类型,您最终会得到最小值值,从(比如说)

01111111 (127)
10000000 (-127)

在某些架构上 - 至少在某些模式下 - 这种溢出不会给出值,它会导致错误。当它确实给出一个值时,它基本上仍然只是二进制计数。假设您有一个 8 位无符号整数值...最后几个值是

 11111100
 11111101
 11111110
 11111111

那么合乎逻辑的下一步就是进入下一个位:

100000000

所以计算机有效地做到了这一点 - 但随后丢弃了新的最高位,只保留了最低 8 位(因为它是 8 位类型)。

不过,您不必使用计算机即可看到这种效果。假设您的汽车中有一个模拟里程表 - 带有多个“轮子”的那种。当您到达其范围的末尾时,它就会环绕:

99997
99998
99999
00000 // Overflow!

关于binary - 在计算机中,为什么最大整数加一会导致零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9679973/

相关文章:

c - 使用十六进制编辑器修改库中的 env 变量名称?

java - 在 Java 中以二进制格式打印一个 short

c++ - 不同位的随机对

c - c 中二进制字符串的 OR 运算给出一半输出错误

ruby - 在 CLI gem 中,我在哪里存储第三方二进制可执行文件?

c++ - 二进制文件加密问题

rest - 自定义休息协议(protocol)是基于二进制而不是像 Http 那样基于文本的,这是一件好事吗?

c++ - 二进制文件 I/O 问题

r - 基于间隔和两个变量 - 年龄类别创建二元变量

PHP如何将图像转换为二进制并在jquery中使用ones和noughts作为变量