02二进制的原码、反码、补码

1概述

在计算机中,bit(位)是数据存储的最小单元,简记为b,也称为比特(bit),每个二进制数字0或1就是一个位(bit),其中每 8bit 就是一1 byte(字节)。

2进制

二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。


02二进制的原码、反码、补码_第1张图片
二进制的表示.png

二进制的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”
十进制的基数为10,进位规则是“逢十进一”,借位规则是“借一当十”
八进制和十六进制类似

例子:

123:十进制123=1*10^2 + 2*10^1 + 3*10^0
0b1111:二进制1111,转为十进制15 = 1*2^3 + 1*2^2 + 1*2^1 +1*2^0
0234:八进制234,十进制156
0x789:十六进制789,十进制1929

3原码、反码、补码

在计算机中,数值一律用补码来表示和存储,为什么以补码的形式来存储?因为在计算两个数的减法时,计算机可以将负数的运算当作加法来处理。(使用补码,可以将符号位和数值域统一处理;此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路)

补码的特性
1、正数的原码、反码、补码都相同。
2、对一个整数的补码再求补码,等于该整数自身。
3、补码的正零与负零表示方法相同。

怎么求补码?

将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
1、原码就是它对应的二进制码
2、反码就是原码的各位取反
3、补码就是原码的反码加1

例如-1的补码是

-1的原码是 10000000 00000001
-1的反码是 11111111 11111110
-1的补码是 11111111 11111111
(计算方法是在其反码的基础上加上1)

4二进制的运算

二进制运算规则

加法有四种情况:
0+0=0,0+1=1,1+0=1,1+1=10
0 进位为1

减法有四种情况:
0-0=0,1-0=1,1-1=0,0-1=1

乘法有四种情况:
0×0=0,1×0=0,0×1=0,1×1=1

除法
0÷1=0,1÷1=1。

正数相加

例如:1+1 ,在计算机中运算如下:
1的原码为:
00000000 00000000 00000000 00000001
因为“正数的原码、反码、补码都一样”,所以,1的补码 = 1的原码,所以 1的补码+ 1的补码 就等于:

00000000 00000000 00000000 00000001
+
00000000 00000000 00000000 00000001
=
00000000 00000000 00000000 00000010
( 转换为10进制) = 02^0 + 12^1 = 0 + 2 =2

正数相减

例如:1-2,在计算机中运算如下:
在计算机中减运算其实是作为加运算来操作的,
所以,1-2 = 1 + ( -2 )

第一步:把1补码找出来(因为正数的原码、反码、补码都一样,所以我们可通过原码直接获取补码):

1的补码:
00000000 00000000 00000000 00000001

第二步:把-2的原码找出来:

-2的原码:
10000000 00000000 00000000 00000010

第三步:把-2的反码找出来:

-2的反码:
11111111 11111111 11111111 11111101

第三步:把-2的补码找出来:

-2的补码:
11111111 11111111 11111111 11111110

第四步:1的补码与-2的补码相加:

00000000 00000000 00000000 00000001
+
11111111 11111111 11111111 11111110
=
11111111 11111111 11111111 11111111

第五步:将计算结果的补码转换为原码,反其道而行之即可(如果想将二进制转换为十进制,必须得到二进制的原码)

补码:11111111 11111111 11111111 11111111
=
反码:11111111 11111111 11111111 11111110
=
原码:10000000 00000000 00000000 00000001

第六步:将计算结果的二进制原码 转换 为十进制

二进制原码:10000000 00000000 00000000 00000001 = 1*2^0 = -1

参考

二进制(原码、反码、补码)
https://blog.csdn.net/songt1122/article/details/83892298
补码的百度百科
C语言程序设计精髓

你可能感兴趣的:(02二进制的原码、反码、补码)