Why is 1 << 3 equal to 8 and not 6?
本问题已经有最佳答案,请猛点这里访问。
在
1 2 3 4 5 6 | enum { STAR_NONE = 1 << 0, // 1 STAR_ONE = 1 << 1, // 2 STAR_TWO = 1 << 2, // 4 STAR_THREE = 1 << 3 // 8 }; |
为什么
向左移动一个数字等于该数字乘以2n,其中
为了了解这是怎么回事,我们举个例子,假设我们有一个数字
0×27 + 0×26 + 0×25 + 0×24 + 0×23 + 1×22 + 0×21 + 1×20 = 1×22 + 1×20 = 4 + 1 = 5
现在,
0×27 + 0×26 + 0×25 + 1×24 + 0×23 + 1×22 + 0×21 + 0×20 = 1×24 + 1×22 = 16 + 4 = 20
但我们可以将1×;24+1×;22写成
1×24 + 1×22 = (1×22 + 1×20)×22 = 5×4 → 20
由此可以得出结论:
k << m = k×2m
所以在你的例子中,
如果你改为这样做,那么
二进制中的1是
通过向左移动3位(即
1 | 0000 1000 |
小数点后8位而不是6位。
用二进制思维。你真的这么做了。0001向左移动3次=1000=8
因为二加三等于八。