2012-08-29 121 views

回答

3

this answer摘自:


左移(< <)

整数被存储在存储器中,作为一系列比特。例如,存储为一个32位数字6 int将是:

00000000 00000000 00000000 00000110 

移这个位模式向左移一位的位置(6 << 1)将导致12的数目:

00000000 00000000 00000000 00001100 

作为你可以看到,数字已经向左移动了一个位置,并且右边的最后一个数字填充了一个零。您可能还会注意到左移等于乘以2的幂。因此,6 << 1等于6 * 2,而6 << 3等于6 * 8。一个好的优化编译器将在可能的情况下替换乘法。

非圆形换档

请注意,这些是不循环移位。这个值向左移位一个位置(3,758,096,384 << 1):

11100000 00000000 00000000 00000000 

导致3221225472:

11000000 00000000 00000000 00000000 

其被移位“关结束”的位将丢失。它不会环绕。