-1

您能否用一些很好的例子来解释以下几行。

左算术移位 n 相当于乘以 2 n (前提是值不溢出)。

和:

将二进制补码值向右算术移位 n 相当于除以 2 n并舍入到负无穷大。如果二进制数被视为 1 的补码,则相同的右移运算会导致除以 2 n 并向零舍入。

4

3 回答 3

3

我将解释在我们更熟悉的基础上发生的事情:10。

假设你有一个以 10 为底的数字 N=123。现在,你将这个数字“移动”到左边 k=3 个位置,用 0 填充空的数字。所以你得到 X=123000。

请注意 X = N * 10 k

以 2 为底的情况类似。

 Example 1 (base 10)   |  Example 2 (base 2)
                       |
 N        =    123     |  N       =   110101 (53 in base 10)
 k        =      3     |  k       =        2 (in base 10)
 N << k   = 123000     |  N << k  = 11010100 (212 in base 10)
                       |
 10^k     =   1000     |  2^k     =      100 (in base 2; 4 in base 10)
 N * 10^k = 123000     |  N * 2^k = 11010100 (53 * 4 = 212 in base 10)
                       |

右移的情况只是该过程的镜像,在基数 10 中也是类似的。例如,如果我在基数 10 中有 123456,并且我“右移”3 个位置,我得到 123。这是 123456 / 1000 (整数除法),其中 1000 = 10 3

于 2010-05-10T07:34:22.887 回答
1

http://en.wikipedia.org/wiki/Arithmetic_shift

于 2010-05-10T06:43:33.730 回答
0

创建自己的示例很容易。

考虑二进制的五个101。左移一次,你会得到1010十进制的二进制。再做一次,你会得到10100二十个等等。

于 2010-05-10T07:41:10.960 回答