在C我有这样的enum:
enum {
STAR_NONE = 1 << 0, // 1
STAR_ONE = 1 << 1, // 2
STAR_TWO = 1 << 2, // 4
STAR_THREE = 1 << 3 // 8
};
Run Code Online (Sandbox Code Playgroud)
为什么1 << 3等于8而不是6?
向左移动数字相当于将该数字乘以2 n,其中n是您移动该数字的距离.
为了看看这是如何真实让我们举一个例子,假设我们有数字,5所以我们把它2移到左边,5二进制是00000101ie
0×2 7 + 0×2 6 + 0×2 5 + 0×2 4 + 0×2 3 + 1×2 2 + 0×2 1 + 1×2 0 = 1×2 2 + 1×2 0 = 4 + 1 = 5
现在,5 << 2将00010100即
0×2 7 + 0×2 6 + 0×2 5 + 1×2 4 + 0×2 3 + 1×2 2 + 0×2 1 + 0×2 0 = 1×2 4 + 1×2 2 = 16 + 4 = 20
但我们可以写1×2 4 + 1×2 2作为
1×2 4 + 1×2 2 =(1×2 2 + 1×2 0)×2 2 = 5×4→20
由此可以得出结论,5 << 2相当于5×2 2,一般可以证明这一点
k << m = k×2 m
所以在你的情况下1 << 3相当于2 3 = 8,因为
1 << 3→交通b00000001 << 3→交通b00001000→交通2 3 - > 8
如果不是这样做3 << 1,然后
3 << 1→ b00000011 << 1→ b00000110→2 2 + 2 1 →4 + 2→6
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |