关于补码求真值的问题

请问已知补码求真值的公式中这个图片说明
公式是如何推导的。

图片说明

c++
0

5个回答

补码和原码是互补的关系,最高一位是符号位,如果是1代表真值是负数,如果是0代表真值是正数
例如 11010110 的源码为 10101010 不要符号位源码和补码相加为 1010110 + 0101010 = 10000000 = 2的7次方
所以知道这个规律求补码真值就不需要记公式了

1

十进制 -9 把符号位用1表示是19 19的补码是11
补码11的真值是 -10的1次方+1 = -10+1 = -9

1

-10的一次方是先求方再拼符号 -(10)1

1

正数的补码就是它本身。负数的补码是取反+1
这个规则很容易理解,我们用10进制表示,如果用两位数表示一个10进制,那么
00=0 01=1 02=2 ... 09=0
-1怎么表示?取相反的十进制数(9-n)+1
1相反的数是8
2相反的数是7
3的相反数是6
...
9相反的树是1
那么-1就是01的相反数98,再+1=99
这么表示有什么好处?
假设我们在00前面添加一个虚拟的1
那么
-1=100-1=99
-2=100-2=98
...

1
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复大土逼: 合着我说了那么多都白说了。因为这么表示是最自然的方式,取反+1的本质就是在最高位前面+1再相减
一年多之前 回复
yesheng701
吃我的裤衩 回复caozhy: 其实我想知道的不是补码转真值的结论。而是推导过程。负数的补码等于其绝对值取反加1,这个结论我已经背的滚瓜乱熟了,我想问的如何推导出这个结论的,这个结论明显是适合,补码为正数和负数两种情况的
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复大土逼: 懂啦?
一年多之前 回复
yesheng701
吃我的裤衩 回复caozhy: 俺知道了,因为补码第一位是符号位。-a[n-1]*2^n-1 其实可以看成 -1 * a[n-1]*2^n-1,后者不是0就是1,所以公式可以这么写。
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复大土逼: 十进制的123 = ?,就是1x10^2 + 2x10^1 + 3x10^0。然后你再按照我说的就理解了。
一年多之前 回复
yesheng701
吃我的裤衩 回复大土逼: A = [A]补 - 2^n ,如何推导 A = ...上述公式的。这个很蒙蔽。
一年多之前 回复
yesheng701
吃我的裤衩 [A]补 = 2^n + A ( -2^n <= A < 2^n, mod 2^n);
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 09=0写错了,是09=9
一年多之前 回复

或者这么写
97 98 99 00 01 02 03 ...
是不是写成了一个自然的循环,只是最高的进位丢掉。
对应就是
-3 -2 -1 0 1 2 3 ...

如果你10进制看懂了,那么2进制就好理解了。

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!