
已知补码如何求原码、真值
已知补码求真值
定点整数
正数
正数的原码、补码、反码都是一样的
负数
负数的原码就是补码的补码
如何求补码
最高位是符号位,符号位保持不变,其余位取反,取反后末位+1,得到的就是补码
例题
例题1
[ x ] 补 = 10101 [x]_补 = 10101 [x]补=10101
-
最高位为
1
(10101),说明x
是一个负数 -
那么
[x]补
的反码为(符号位不变,其余按位取反):
11010 11010 11010 -
[x]补
的补码为[x]补
的反码末位+1
11011 11011 11011 -
所以
x
的原码为11011
,真值为:
− 1 × ( 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 ) = − ( 8 + 2 + 1 ) = − 11 -1 × ( 1×2^{3} + 0×2^{2} + 1×2^{1} + 1×2^{0}) \\ = -(8 + 2 + 1) = -11 −1×(1×23+0×22+1×21+1×20)=−(8+2+1)=−11
例题2
[ x ] 补 = 00111 [x]_补 = 00111 [x]补=00111
-
因为最高位为
0
(00111),说明x
是一个正数 -
正数的原码、反码、补码都相同
-
所以
[x]原
= 00111 -
x
的真值为:
1 × 2 3 + 1 × 2 2 + 1 × 2 0 = 7 1×2^{3} + 1×2^{2} + 1×2^{0} = 7 1×23+1×22+1×20=7
例题3
[ x ] 补 = 11100 [x]_补 = 11100 [x]补=11100
-
最高位为
1
(11100),说明x
是负数 -
[[x]补]反
(x补码的反码) = 10011 -
[[x]补]补
(x补码的补码) =[[x]补]反
末位+1 =10100
-
x
的真值 = -22 =-4
定点小数
- 定点小数中正数的格式为
0.xxxx
,负数的格式为1.xxxxx
也就是小数点左侧的第一位是符号位
正数
正数的原码、补码、反码都一样
负数
负数的原码就是补码的补码
例题
例题1
[ x ] 补 = 1.1100 [x]_补 = 1.1100 [x]补=1.1100
-
符号位位
1
(1.1100),说明x
是负数 -
[[x]补]反
= 1.0011 -
[[x]补]补
=[[x]补]反
末位+1 = 1.0100 -
x
的真值 =-0.25
例题2
[ x ] 补 = 0.1110 [x]_补 = 0.1110 [x]补=0.1110
-
x
的符号位为0
(0.1110),说明x
是正数 -
所以
[x]原
=[x]补
= 0.1110 -
x的真值
= 0.5 + 0.25 + 0.125 =0.875
例题3
[ x ] 补 = 1.0000 [x]_补 = 1.0000 [x]补=1.0000
- 这是一个较为特殊的补码,真值为
-1
- 事实上,负数的补码就是其绝对值的补数(a+b=模,则a与b互为补数)
更多推荐
所有评论(3)








谁要是跟老外学算术,立刻、马上,直接,就掉沟里去了!
-128 + 0 + 0 + 0 + 0 + 0 + 0 + 1 = -127。
你用 "取反加一" 来做吧,没有这么简便了。
如果 8 位补码是 1100 1001,其十进制就是:
-128 + 64 + 8 + 1 = -55。
如果 8 位补码是 0100 1001,其十进制就是:
0 + 64 + 8 + 1 = +73。
看见了吗?
你只须掌握【进制转换】就行了。
============
什么原码反码取反加一?
看过《卖拐》吗?
计算机专家编这些谎言,和东北老赵,是一个路子!
都是【忽悠】。
普通的 8 位二进制数,其各个位的权,如下所示:
128、64、32、16、8、4、2、1。
而 8 位二进制补码,其各个位的权,如下所示:
-128、64、32、16、8、4、2、1。
如果补码的最高位是 0,这个负数(-128),就不存在了。
经过进制转换,得出的,显然就是正数。
如果补码最高位是 1,就用负数(-128)加上后面的正数。
得出的,必定就是负数。