算术移位后的数字是什么意思?
What is the meaning of the number after Arithmetic shift?
问题出处:
A decimal number -100 stores into an 8 bits register using two's complement, What is the
decimal after the 3 bits right arithmetic shift?
答案是-13
,这是它如何解决的:
- 将
-100
转换为二进制01100100
- 补码
10011100
‖‖
- 算术右移
11110011
- 再次补码
00001101
问题:
我不明白为什么从第3步得到结果,需要再次进行补码,答案是-13
而不是13
。
正确的转换应该是:
Decimal = Binary 2's complement
-100 = 1001 1100
-100 >> 1 = 1100 1110 = -50
-100 >> 2 = 1110 0111 = -25
-100 >> 3 = 1111 0011 = -13
评论您的步骤,on-by-one:
- convert
-100
to binary 01100100
您没有转换 -100
。您正在将 100
转换为二进制。小修正,但非常重要。
- two's complement
10011100
这是正确的,因为我们通过取反并加上 1
来取一个数的 2 的补码。
inv(01100100) = 1001 1011
add one = 1001 1100
- right arithmetic shift
11110011
为了 100% 准确,我会说 right arithmetic shift three times
- two's complement again
00001101
这是我认为你的问题...
所以结果是 11110011
我们都同意这一点。这里的问题是 11110011
的十进制是多少?我知道进行转换的两种方法。我会在这里总结一下。
方法一:二进制补码
我们知道11110011
是一个负数,因为它的MSB是1
。为了找出值是多少,我们采用 2 的补码。所以我们反转值并添加 1
.
inv(11110011) = 0000 1100
add 1 = 0000 1101
---------
convert to decimal 13
所以,我们知道它是负数,现在我们知道它的价值了。所以 -13
就是答案。
方法二:使用权重
我们为每个位分配一个权重,然后将它们全部加在一起。所有位都具有正权重,除了具有负权重的 MSB。
Bit index 7 6 5 4 3 2 1 0
Weight -128 64 32 16 8 4 2 1
所以对于我们的结果,我们有:
Bit index 7 6 5 4 3 2 1 0
Weight -128 +64 +32 +16 +8 +4 +2 +1
-------------------------------------------
-13 1 1 1 1 0 0 1 1
-128 +64 +32 +16 +0 +0 +2 +1
-128
+ 64
+ 32
+ 16
+ 2
+ 1
----
-13
这两种方法都是有效的,最后会给你正确的转换,这取决于你喜欢哪种转换方法。
如果您有任何疑问,请阅读 this。
问题出处:
A decimal number -100 stores into an 8 bits register using two's complement, What is the decimal after the 3 bits right arithmetic shift?
答案是-13
,这是它如何解决的:
- 将
-100
转换为二进制01100100
- 补码
10011100
‖‖ - 算术右移
11110011
- 再次补码
00001101
问题:
我不明白为什么从第3步得到结果,需要再次进行补码,答案是-13
而不是13
。
正确的转换应该是:
Decimal = Binary 2's complement
-100 = 1001 1100
-100 >> 1 = 1100 1110 = -50
-100 >> 2 = 1110 0111 = -25
-100 >> 3 = 1111 0011 = -13
评论您的步骤,on-by-one:
- convert
-100
to binary01100100
您没有转换 -100
。您正在将 100
转换为二进制。小修正,但非常重要。
- two's complement
10011100
这是正确的,因为我们通过取反并加上 1
来取一个数的 2 的补码。
inv(01100100) = 1001 1011
add one = 1001 1100
- right arithmetic shift
11110011
为了 100% 准确,我会说 right arithmetic shift three times
- two's complement again
00001101
这是我认为你的问题...
所以结果是 11110011
我们都同意这一点。这里的问题是 11110011
的十进制是多少?我知道进行转换的两种方法。我会在这里总结一下。
方法一:二进制补码
我们知道11110011
是一个负数,因为它的MSB是1
。为了找出值是多少,我们采用 2 的补码。所以我们反转值并添加 1
.
inv(11110011) = 0000 1100
add 1 = 0000 1101
---------
convert to decimal 13
所以,我们知道它是负数,现在我们知道它的价值了。所以 -13
就是答案。
方法二:使用权重
我们为每个位分配一个权重,然后将它们全部加在一起。所有位都具有正权重,除了具有负权重的 MSB。
Bit index 7 6 5 4 3 2 1 0
Weight -128 64 32 16 8 4 2 1
所以对于我们的结果,我们有:
Bit index 7 6 5 4 3 2 1 0
Weight -128 +64 +32 +16 +8 +4 +2 +1
-------------------------------------------
-13 1 1 1 1 0 0 1 1
-128 +64 +32 +16 +0 +0 +2 +1
-128
+ 64
+ 32
+ 16
+ 2
+ 1
----
-13
这两种方法都是有效的,最后会给你正确的转换,这取决于你喜欢哪种转换方法。
如果您有任何疑问,请阅读 this。