算术运算
你能否用下面的例子来解释下面的内容?
算术左移n等于乘以2n(假设该值不溢出)。
和:
n的二进制补码值的右算术移位相当于除以2n并向负无穷大舍入。 如果二进制数被视为1的补码,则相同的右移运算会导致2n除法并向零舍入。
我将解释我们更熟悉的基地会发生什么:10。
以10为基数,假设您的数字为N = 123。 现在,你将这个数字“移”到左边的k = 3个位置,用0填充空的数字。所以你得到X = 123000。
请注意,X = N * 10k。
基数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 = 103。
http://en.wikipedia.org/wiki/Arithmetic_shift
创建自己的例子很容易。
考虑五个二进制101
。 左移一次,你得到1010
,这是十进制的二进制。 再次做到这一点,你得到10100
这是二十等等。