本文只简单提及背后的原理,主要讲怎么去算,如果有更多的问题,欢迎留言,请善用文章正文大字标题

什么是原码反码补码

随便拿个十进制数字来说吧,3的三位数二进制是011

/*
3的原码: 011
3的反码: 100  也就是0变成1,1变成0
3的补码: -101  反码加1,再加个负号就是补码
*/

原码就是数字的数值部分,负数的原码带负号

/*
 3的原码: 011
-3的原码:-011  也就是对应的正数的二进制加个符号
*/

将一个数转换成补码,需要在这个数前面加个负号

/*
-3的原码:-011
-3的反码:-100
-3的补码: 101   //负号因为补码运算被抵消了
*/

故补码运算,其实就是在改变二进制数前面的正负号,而且,对于有符号二进制最左边为1的二进制是补码,例如1000,将这种数转换成10进制,需要转换成原码再转换成十进制

/*
补码:1000
反码:0111
补码:-1000   //也就是十进制的-8
*/

注意,平时我们作业考试时,未说明是有符号二进制都默认他是无符号的转换,例如平时1000就是 8 ,他就是原码,因为是无符号的二进制,最高位不是符号位,一般最高位是符号位题目会声明

怎样将减法转成加法

我们现在要将任何一个二进制减法转换成加法

 1110 - 0101
//我们可以知道,如果想转换成加法,就需要把上式中的
 -0101  的负号拿到0101里面,不正好是补码计算吗
 1110 - 0101
=1110 + 1011
=1001

验算是否正确,直接转换成10进制计算

1110 - 0101 
1110最高位是1,可见是一个补码,
进行补码计算,得 -0010 ,也就是 -2
原式子就是 -2 - 5 得 -7
​
将计算的结果转换成原码, -0111 ,也就是 -7
可见结果正确

对于有符号的二进制,最高位为1,就表示他是补码