1. 问题

我们知道,在计算机中是用补码来存放实际的正负数的,那么计算机为什么要用补码来存放数据,计算机课本中,那个补码 = 反码 + 1的公式又是怎么来的?

要了解这些问题的答案,我们先要了解一些基本的知识,最基本的同余公式这里就不讲了,看本帖之前需要去离散数学或数论中了解下基本的同余运算即可。

 

2. 计算机的字长和同余计算

计算机的字长是指计算机运算时,能存放的最大数字的的位长,如我们常说的32位机,字长就是32位的,寄存器只有32bit,最多能放32个1,能表达的最大数字就是232 - 1

当超过这个数字后,由于无法存储,会被计算机丢弃,同时会设置CPU的溢出标志位,这就是所谓的溢出

为了简单,我们用8位机来做演示,即最大能表示的数字是28 - 1

m = 28

所以,计算机的计算 (a + b)时,实际上计算的是 (a + b) % m (mod m),超过m的部分都会被丢弃,只取余数的部分,即计算机中的计