可能重复:
Absolute Beginner's Guide to Bit Shifting?
What is the JavaScript >>> operator and how do you use it?
我在阅读一些代码时遇到了<<
。
1<<1 //2
2<<1 //4
3<<1 //6
3<<2 //12
答案 0 :(得分:4)
取自this answer:
整数在内存中存储为一系列位。例如,存储为32位int
的数字6将是:
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
结果为3,221,225,472:
11000000 00000000 00000000 00000000
“失去结束”的数字将丢失。它没有环绕。
答案 1 :(得分:1)
这是bitwise left shift operator。
a << b
会将b
位移到a
二进制表示的左侧。