背景
大家都知道计算机内部采用补码表示整数的,但是具体到补码的内在含义,很多人不能理解,故我们分享自己的理解。
首先说下补码的定义以及基本性质:
1) 正数的补码和原码相同;
2) 负数的补码等于取反后加1;
3) 0
的正负两种补码相同;
4) 对一个补码再求补码等于自己;
5) 一个正数的原码和其对应的负数的补码相加等于模;
针对本文,我们其实只关心规则1)和2)即可。
实例
为方便说明现有的补码定义(即正数的补码等于原码;负数的补码等于取反加1),本文均以八进制为例。
5 – 3 //记作式A,方便后文引用
= 5 + ( -3 )
(下面开始转为二进制补码格式)
= 0101 + ( 1111 – 0011 + 1 ) //展开-3的补码形式
= ( 0101 – 0011 ) + ( 1111 + 0001 ) //交换
= ( 0101 – 0011 ) + ( 0000 ) //此处10000溢出为0000
= 0010 //得出结果是2的补码,也是2的原码