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;
}
posted @ 2025-12-18 11:36  阳光天气  阅读(2)  评论(0)    收藏  举报