C++中d |= 1 << k理解
步骤 1:理解 1 << k(生成 “定位掩码”)
1 << k 是左移运算,核心是生成一个 “仅第 k 位为 1,其余位全为 0” 的二进制数(这个数叫 “掩码”,用来精准定位第 k 位)
步骤 2:理解 d | (1 << k)(按位或,仅置 1 目标位)
| 是按位或运算,规则极其简单:两个数的二进制位逐位比较,只要有一个位是 1,结果位就是 1;只有都为 0 时,结果位才是 0。
结合步骤 1 的 “掩码”,d | (1 << k) 的效果是:
第 k 位:不管 d 原来是什么,结果一定是 1(掩码的第 k 位是 1,按位或后必为 1);
其他位:完全保留 d 的原有值(掩码的其他位是 0,按位或后不变)
步骤 3:理解 |=(复合赋值,简化写法)
|= 是复合赋值运算符,等价于 d = d | (1 << k),只是 C/C++ 的 “语法糖”(简化代码)。
点击查看代码
d |= 1 << 3;
// 等价于
d = d | (1 << 3);
两者效果完全一样,只是前者写起来更简洁。
完整例子(逐行演示)
点击查看代码
#include<iostream>
#include<cstdint>
using namespace std;
//打印8位二进制(辅助函数)
void print8Bit(uint32_t num) {
for (int i = 7; i >= 0; i--) {
cout << ((num >> i) & 1);
}
cout << endl;
}
int main() {
cout << "1<<k生成掩码示例" << endl;
uint32_t d = 0;//初始 :0000 0000
cout << "初始d:" << d << "->二进制:";
print8Bit(d);
//第一步:设置k=1位为1
d |= 1 << 1;
cout << "设置k=1后:" << d << "->二进制:";
print8Bit(d);
// 第二步:设置k=3位为1(保留k=1位的1)
d |= 1 << 3;
cout << "设置k=3后:" << d << "->二进制";//d=10 ->
print8Bit(d);
return 0;
}

浙公网安备 33010602011771号