unsigned long long n = 0;
for (int i = 0; i <= 64; i+=2)
n |= 1ULL << i; //WHAT DOES THIS DO? AH!
我正在努力理解这段代码的第三行实际上是做什么的。请有人帮忙澄清一下!
unsigned long long n = 0;
for (int i = 0; i <= 64; i+=2)
n |= 1ULL << i; //WHAT DOES THIS DO? AH!
我正在努力理解这段代码的第三行实际上是做什么的。请有人帮忙澄清一下!
0101 (decimal 5)
OR 0011 (decimal 3)
= 0111 (decimal 7)
相关文章
|= 1ULL << i
的意思是将第 i
位设置为1。for循环遍历每个第二位,因此64位无符号长整型中的每个其他位都将被设置为1。
换句话说,您将获得一个位模式,如...0101010101
。
这是将1左移i位,然后将结果与n进行OR运算。实际上是在n中设置第i位的比特位。
它将n与i的值进行按位或运算,并将1左移i位。
我相信n的(二进制)值应该是:
0101010101010101010101010101010101010101010101010101010101010101
当循环完成时,尽管我还没有测试过它..
i+=2
,所以我删除了我的答案。 - bluevectorn |= 1ULL << i; //WHAT DOES THIS DO? AH!
在右侧,您有一个"1ULL",它是一个常量1无符号长整型
。您正在将"1ULL"左移i次
。然后将“1ULL”的左移结果与n匹配以执行按位OR运算。因此,n将设置为(n | (1ULL << i))
。
整个操作或行将n的第i位设置为1。