【发布时间】:2009-12-25 19:50:10
【问题描述】:
我无法理解 C# 中的这段代码
int i=4
int[] s =new int [1<<i];
Console.WriteLine(s.length);
输出为 16 我不知道为什么会这样输出?
【问题讨论】:
我无法理解 C# 中的这段代码
int i=4
int[] s =new int [1<<i];
Console.WriteLine(s.length);
输出为 16 我不知道为什么会这样输出?
【问题讨论】:
【讨论】:
来自文档
如果第一个操作数是 int 或 uint (32位数量),移位计数为 由低五位给出 第二个操作数。
如果第一个操作数是 long 或 ulong (64位数量),移位计数为 由低六位给出 第二个操作数。
注意 i
这将与 2^(低 5 位的实际值)相同。
所以在你的情况下,它会是 2^4=16。
【讨论】:
我假设您的意思是 i 代替 r...
<<n 表示“左移 n* 位”。由于您从 1=binary 00...00001 开始,如果您向左移动 4 次,您将得到二进制 00...10000 = 16(如果您熟悉二进制算术,这会有所帮助 - 否则“calc.exe”有一个二进制转换器)。
每个位向左移动n 位置,用 0 填充(在右侧)。 *=请注意,n 实际上是 int 的“mod 32”,因此(作为极端情况)1
还有>>(右移),它向右移动,用0 填充uints 和+ve ints,1 填充-ve ints。
【讨论】:
x << y
表示将 x 向左移动 y 位。
3 是 0011,3
一般用来乘2(左移就是乘2)
【讨论】:
如前所述,
【讨论】: