算术运算

你能否用下面的例子来解释下面的内容?

算术左移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这是二十等等。

链接地址: http://www.djcxy.com/p/72669.html

上一篇: Arithmetic Operations

下一篇: Real world use cases of bitwise operators