operator << in c#

我在c#中无法理解这段代码

int i=4 int[] s =new int [1<<i]; Console.WriteLine(s.length); 

输出是16我不知道为什么输出那样?

位移算子

从文档

如果第一个操作数是int或uint(32位数),则移位计数由第二个操作数的低位5位给出。

如果第一个操作数是long或ulong(64位数量),则移位计数由第二个操作数的低位6位给出。

注意,i << 1和i << 33给出相同的结果,因为1和33具有相同的低位5位。

这将与2 ^( 低5位的实际值 )相同。

所以在你的情况下,它将是2 ^ 4 = 16

我假设你的意思是i代替r

<表示“向左移位n *位”。 因为你从1 =二进制00 ... 00001开始,如果你向左移动4次你得到二进制00 ... 10000 = 16(如果你熟悉二进制算术会有所帮助 - 否则“calc.exe”有一个二进制转换器)。

每个位向左移动n位置,用0填充(在右侧)。 * =请注意,对于intn实际上是“mod 32”,因此(作为角点情况)1 << 33 = 2,而不是0,这是您可能期望的。

还有>> (右移),右移,用uint s和+ ve int s填充0 ,用-ve int s填充1

<<是左移算子

 x << y 

表示将x向左移位x。

3是0011,3 << 1是0110其中6。

它通常用于乘以2(向左移动乘以2)

如前所述,<<是左移算子。 在您的特定示例中,数组大小被定义为2的幂。值1左移一些数字将是1,2,4,8,16,...