原码、反码和补码都可以作为计算机中数值的编码形式,而目前通用的是补码,那么为什么不是原码和反码呢?
1 计算方法
原码、反码和补码的计算公式很容易理解,原码就是符号位+绝对值,正数的反码等于原码,负数的反码在原码的基础上,符号位不变,其余各位取反,补正数的补码等于原码,负数的补码等于其原码+1.
2 为什么要用补码作为计算机中数值的编码形式
人脑最容易理解原码,人脑会自动识别符号位和绝对值位进行运算,但对于计算机电路,辨别符号位会让电路变得更复杂,因此就想到,如何让数值的符号位也参与运算?
首先原码做不到这一点,1 - 1 = 0 = [00000001]原 + [10000001]原 = -2.
于是出现了反码,1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [00000001]反 + [11111110]反 = [11111111]反 = [10000000]原 = -0,绝对值对了,但符号位似乎不太对,原因在于0在反码中有两种表示方法.
于是,补码出现了,1 - 1 = 1 + (-1) = [00000001]原+ [10000001]原 = [00000001]补+ [11111111]补= [100000000]补 = [00000000]补 = [00000000],这样绝对值对了,符号也对了,同时还可以表示-128.
至于背后的数学原理,有空的时候单独出一期随笔
本人研究牲一枚,敬请各位大佬批评指正~~~
浙公网安备 33010602011771号