一、概念集合
1.机器数:一个数在计算机中的二进制表示形式叫一个数的机器数。
2.真值:机器数所对应的真实数值叫真值。
3.原码:形式和机器数相同,比真值多一个符号位。
4.补码:正数:等于原码
负数:等于(符号位不变)原码取反+1
5.反码:正数:等于原码
负数:等于(符号位不变)原码取反
二、反码和补码的意义
反码和补码的意义就是为了解决计算机中负数的加法问题。当需要相加时只需将两者的反码相加即可,因为正负去判断符号位的问题,可以极大的提高运算效率。例如:
1
−
1
=
0
1-1=0
1−1=0:
1
−
1
=
1
+
(
−
1
)
=
[
00000001
]
反
+
[
11111110
]
反
=
[
11111111
]
反
=
[
10000000
]
原
=
−
0
1-1=1+(-1)=[0000 0001]_反+[1111 1110]_反=[1111 1111]_反=[1000 0000]_原=-0
1−1=1+(−1)=[00000001]反+[11111110]反=[11111111]反=[10000000]原=−0
而反码显然还存在一个问题,就是当出现0的时候会有+0和-0两种表示结果,这时候补码就应运而生了,通过计算机溢出自动舍去的性质实现加法,且不需要对0进行特判:例如:
1
−
1
=
0
1-1=0
1−1=0:
1
−
1
=
1
+
(
−
1
)
=
[
00000001
]
补
+
[
11111111
]
补
=
[
00000000
]
补
=
[
00000000
]
原
=
0
1-1=1+(-1)=[0000 0001]_补+[1111 1111]_补= [0000 0000]_补=[0000 0000]_原=0
1−1=1+(−1)=[00000001]补+[11111111]补=[00000000]补=[00000000]原=0