unsigned long long n = 0;
for (int i = 0; i <= 64; i+=2)
n |= 1ULL << i; //WHAT DOES THIS DO? AH!
我正试图围绕这段代码的第三行实际做的事情。有人请帮忙清除这个!
答案 0 :(得分:5)
该行设置n的 th 位。
1ULL
是整数1,类型为unsigned long long。<<
是一个bithift运算符。 1ULL << i
等于2 i ,或二进制:100...0
,带有i零。n |= x;
是复合赋值运算符。它类似于撰写n = n | x;
。|
是按位OR运算符。维基百科有一个例子,展示了在一般情况下按位OR运算符的工作原理:
0101 (decimal 5)
OR 0011 (decimal 3)
= 0111 (decimal 7)
相关强>
答案 1 :(得分:1)
|= 1ULL << i
只是意味着设置i
位。 for循环遍历每秒,因此64位无符号long long中的每个其他位都将设置为1。
换句话说,你会得到像...0101010101
一样的模式。
答案 2 :(得分:1)
它在i处移位1,并将结果与n进行OR运算。实际上它在n中设置了第i位。
答案 3 :(得分:1)
二进制或n,其值为1位,移位i的值。
我相信n的(二进制)值是:
0101010101010101010101010101010101010101010101010101010101010101
当循环完成时,虽然我还没有测试过它..
答案 4 :(得分:1)
n |= 1ULL << i; //WHAT DOES THIS DO? AH!
在右侧,您有"1ULL" which is a constant 1 unsigned long long
。你是left bit shifting "1ULL" i number of times
。然后左移“1ULL”的结果将与n匹配以执行按位OR。所以n will be set to (n | (1ULL << i))
。
整行或操作将n的第i位设置为1。