<<
我在阅读一些代码时遇到了。
1<<1 //2
2<<1 //4
3<<1 //6
3<<2 //12
<<
我在阅读一些代码时遇到了。
1<<1 //2
2<<1 //4
3<<1 //6
3<<2 //12
取自这个答案:
整数作为一系列位存储在内存中。例如,存储为 32 位的数字 6int
将是:
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
“结束”移动的数字丢失了。它不会环绕。
这是按位左移运算符。
a << b
会将位移b
到 的二进制表示的左侧a
。