在机器码中,通常在最左边添加一个不参与运算的符号位,用0表示正号“+”,1表示负号“-”
“◇”表示小数点位置,不占位
小数二进制的转换是小数部分每次乘以2然后取结果的整数部分,如0.5*1 = 1.0,就取1,后面没有了就不用再计算,但这里因为机器字长n为8,所以再补上6个0
设机器字长n为8,首位为符号位,不参与运算
各类机器码参考如下举例
原码
[
+
1
]
原
=
00000001
[+1]_原 = 00000001
[+1]原=00000001
[
−
1
]
原
=
10000001
[-1]_原 = 10000001
[−1]原=10000001
[
+
127
]
原
=
01111111
[+127]_原 = 01111111
[+127]原=01111111
[
−
127
]
原
=
11111111
[-127]_原 = 11111111
[−127]原=11111111
[
+
45
]
原
=
00101101
[+45]_原 = 00101101
[+45]原=00101101
[
−
45
]
原
=
10101101
[-45]_原 = 10101101
[−45]原=10101101
[
+
0.5
]
原
=
0
◇
1000000
[+0.5]_原 = 0◇1000000
[+0.5]原=0◇1000000
[
−
0.5
]
原
=
1
◇
1000000
[-0.5]_原 = 1◇1000000
[−0.5]原=1◇1000000
反码
正数的反码与原码相同
负数的反码是除了符号位,其余位按位取反(简单来说就是除了左边第一位,其余位的1变成0,0变成1)
[
+
1
]
反
=
00000001
[+1]_反 = 00000001
[+1]反=00000001
[
−
1
]
反
=
11111110
[-1]_反 = 11111110
[−1]反=11111110
[
+
127
]
反
=
01111111
[+127]_反 = 01111111
[+127]反=01111111
[
−
127
]
反
=
10000000
[-127]_反 = 10000000
[−127]反=10000000
[
+
45
]
反
=
00101101
[+45]_反 = 00101101
[+45]反=00101101
[
−
45
]
反
=
11010010
[-45]_反 = 11010010
[−45]反=11010010
[
+
0.5
]
反
=
0
◇
1000000
[+0.5]_反 = 0◇1000000
[+0.5]反=0◇1000000
[
−
0.5
]
反
=
1
◇
0111111
[-0.5]_反 = 1◇0111111
[−0.5]反=1◇0111111
补码
(注:考虑到计算的方便性,计算机系统中,数值一律用补码表示)
正数的补码与其原码和反码相同
负数的补码等于其反码末尾加1(1+1=0并且向前进一位,也就是前面的一位也要+1;1+0=1;0+0=0)
[
+
1
]
补
=
00000001
[+1]_补 = 00000001
[+1]补=00000001
[
−
1
]
补
=
11111111
[-1]_补 = 11111111
[−1]补=11111111
[
+
127
]
补
=
01111111
[+127]_补 = 01111111
[+127]补=01111111
[
−
127
]
补
=
10000001
[-127]_补 = 10000001
[−127]补=10000001
[
+
45
]
补
=
00101101
[+45]_补 = 00101101
[+45]补=00101101
[
−
45
]
补
=
11010011
[-45]_补 = 11010011
[−45]补=11010011
[
+
0.5
]
补
=
0
◇
1000000
[+0.5]_补 = 0◇1000000
[+0.5]补=0◇1000000
[
−
0.5
]
补
=
1
◇
1000000
[-0.5]_补 = 1◇1000000
[−0.5]补=1◇1000000
总结:在计算机器码时,首先判断符号是正还是负,然后写出其原码,正数的反码、补码和原码都是一样的,所以只需要记住负数的反码和补码计算方式即可
记忆:先反再补,负数反码按位取反、负数补码为反码末尾+1(符号位始终不变)
如有错误,欢迎评论留言指正