混淆按位运算 |和<<

标签 c bit-manipulation

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

我正在努力思考这段代码的第三行实际上做了什么。有人请帮忙解决这个问题!

最佳答案

该行设置 n 的第 ith 位。

  • 1ULL是整数 1,类型为 unsigned long long。
  • <<是位移运算符。 1ULL << i等于 2i,或二进制:100...0有 i 个零。
  • n |= x;是复合赋值运算符。类似于写n = n | x; .
  • 接线员 |是按位或运算符。

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

   0101 (decimal 5)
OR 0011 (decimal 3)
 = 0111 (decimal 7)

相关

关于混淆按位运算 |和<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038005/

相关文章:

c 枚举类型的按位组合参数

java - 当字节数为奇数时,如何从 ByteBuffer(Little Endian)中获取 long?

c++ - 字符的位表示 C++

c - Matlab编码器: Matlab Array to C Array

c - 为什么我们在 struct sockaddr_un 中仍然有 sun_family ?

c++ - C++的异步函数调用

c - 使用带双指针的 malloc 时出现段错误

c# - 将整数中的一位与另一位交换,代码不起作用

c# - 在 C# 中交换 32 位正整数中的位

c - 了解 C 中的内存访问