按位运算 - 算术运算

时间:2010-05-10 06:33:16

标签: c bitwise-operators

请您解释以下几行,并附上一些很好的例子。

  

n的左算术移位是   相当于乘以2 n   (假设价值不是   溢出)。

  

正确的算术   将n乘以2的补码值   相当于除以2 n 和   向负无穷大四舍五入。如果   二进制数被视为''   补充,然后相同的右移   操作导致除以2 n   并向零舍入。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

答案 2 :(得分:0)

创建自己的示例很容易。

考虑二进制中的五个101。左移一次,得到1010,这是十进制的二进制。再做一次,你得到的是10100二十岁......