与按位运算混淆| 和<<

Jor*_*dan 3 c bit-manipulation

unsigned long long n = 0;
for (int i = 0; i <= 64; i+=2)
    n |= 1ULL << i;       //WHAT DOES THIS DO? AH! 
Run Code Online (Sandbox Code Playgroud)

我试图围绕这段代码实际上做的第三行.有人请帮忙清除这个!

Mar*_*ers 6

该行设置n的 i 位.

  • 1ULL 是整数1,类型为unsigned long long.
  • <<是一个bithift运算符.1ULL << i等于2 i,或二进制:100...0i为零.
  • n |= x;是复合赋值运算符.它类似于写作n = n | x;.
  • 运算符|是按位OR运算符.

维基百科有一个例子,显示了在一般情况下按位OR运算符的工作原理:

   0101 (decimal 5)
OR 0011 (decimal 3)
 = 0111 (decimal 7)
Run Code Online (Sandbox Code Playgroud)

有关