运营商<<在C#
问题描述:
我无法理解在C#中的代码运营商<<在C#
int i=4
int[] s =new int [1<<i];
Console.WriteLine(s.length);
的输出中是16 我不知道为什么输出这样呢?
答
< <是左移位运算符
x << y
意味着移位x至由y位的左边。
3为0011,3 < < 1为0110,其6.
它通常使用2(左移被乘以2)
答
乘以我假设你在意味着i
r
的地方...
<<n
意思是“左移n *位”。由于你从1 =二进制00 ... 00001开始,如果你左移4次,你会得到二进制00 ... 10000 = 16(这有助于你熟悉二进制算术 - 否则“calc.exe”有一个二进制转换器)。
每位向左移动n
位,填充(右侧)为0。 * =请注意,n
实际上是“Mod 32”,因此对于int
,所以(作为角落案例)1 < < 33 = 2,而不是您可能期望的0。
还为-ve int
小号>>
(右移位),其移动为右,与0
填充用于uint
s和+已经int
s和1
。
答
如前所述,< <是左移运算符。在您的具体示例中,阵列大小被定义为2的幂。将值左移一些数字将为1,2,4,8,16 ...
答
来自文档
如果第一个操作数是int或uint (32位数量),则移位计数为 ,由 的第二个操作数的低位五位给出。
如果第一操作数是长或ULONG (64位量),移位计数是由低阶 第二操作数的6位给出 。
此外,i < < 1和I < < 33给出相同 结果,因为1和33具有相同的 低位5个比特。
这将与2 ^(的低位5位的实际值)相同。
所以在你的情况下,它将是2^4 = 16。
wft在downvote? – 2009-12-25 20:06:59