数的存储,也是一个常见的点,那么在计算机中如何表示数呢?答案是二进制!
表示
比如我们有一个数 5,那么二进制表示是101,这好办,但是如果是-5呢?
这就需要有一个符号位,单独地表示数字的正负,符号位被认为地规定在最高位,比如8位有符号整数,那么最高的第八位单独用来表示正负,那么 -5 就可以变成10000101
了,这是好的
可是这又引申出另一问题:如何计算不同符号的数字加减法?
第一思路是想直接竖式加法,可是要知道,减法会对应着借位,cpu对于借位的认知,尚不及小学生
数字存储在寄存器里,而对两个寄存器进行借位的麻烦程度,大概只能用悲剧来形容!
既然每个数相差都是1,而且不同符号的同一个数字,相加之后要等于0,有没有一种操作,对数字做一定的变换,能够在满足上述两个情况呢?
补码
出于对加减法运算的迫切,我们需要一种新的存储方式!
定义:
- 正数的补码是它本身
- 负数的补码是【它表示的这个数字的绝对值的二进制表示】(原码)全部取反(符号位也要取反),再+1
通过补码的变换,我们惊奇的发现这样一个便利而快手的性质: