当前位置: 首页 > news >正文

位操作 之二

| & ~,但是 没有建立“位操作的空间感”

我今天帮你把它彻底讲透,让你以后看到:

bit[7:4] = xxx
bit[3]   = 1
bit[2]   保留

脑子里能自动展开成数学模型。


一、先建立核心思维模型

🧠 本质:寄存器就是一个二进制容器

假设一个 32bit 寄存器:

31                              0
|--------------------------------|

你可以把它理解成:

一排 32 个开关

每一位只能:

0 = 关
1 = 开

所有位操作,本质就是:

🔧 改某几个开关,不影响其他开关


二、最核心公式(所有位操作都围绕它)

🎯 修改某几位的标准步骤:

第一步:清零目标位

第二步:把新值移到对应位置

第三步:写回去

公式:

reg = (reg & ~mask) | (value << shift);

这是万能公式。

你要背下来。


三、一步一步拆开讲

情景1:把 bit[7:4] 改成 n

1️⃣ 先画图

原数据:  xxxx xxxx xxxx xxxx
目标位:        [7 6 5 4]

2️⃣ 构造 mask

bit[7:4] 宽度 = 4bit

1111 << 4

写成代码:

uint32_t mask = 0xF << 4;

现在:

mask = 0000 0000 1111 0000

3️⃣ 清零原来的 7~4

reg & ~mask

~mask 就是:

1111 1111 0000 1111

相当于:

把 7~4 变成 0,其他位不动


4️⃣ 把 n 移到 7~4

(n & 0xF) << 4

注意:

一定要先 & 限制宽度

否则 n 如果超过4bit,会污染别的位。


5️⃣ 合并

reg = (reg & ~mask) | ((n & 0xF) << 4);

结束。


四、保留 / 置零 / 取反 的思维方式


🟢 1️⃣ 保留某几位

什么都不做。


🔴 2️⃣ 某几位清零

reg &= ~mask;

本质:

0 & x = 0
1 & x = x


🔵 3️⃣ 某几位取反

reg ^= mask;

为什么?

1 ^ x = 取反
0 ^ x = 不变

五、读取某几位

假设:

bit[7:4] 表示 mode

读取:

mode = (reg >> 4) & 0xF;

顺序是:

  1. 右移
  2. 再 &

六、你之所以慌,是因为脑子没有“可视化”

我们做一个完整例子。

假设:

reg = 0b1011 0110

修改 bit[5:4] = 01


原数据:

1011 0110↑↑5 4

mask

11 << 4 = 0011 0000

清零

1011 0110
&
1100 1111
=
1000 0110

写入 01

01 << 4 = 0001 0000

合并

1000 0110
|
0001 0000
=
1001 0110

你看到了吗?

位操作不是魔法。

它就是:

画格子
清格子
填格子

七、高手写寄存器代码的方式

永远不会直接写 magic number。

而是这样:

#define MODE_SHIFT 4
#define MODE_MASK  (0x3 << MODE_SHIFT)void set_mode(uint32_t* reg, uint32_t mode)
{*reg = (*reg & ~MODE_MASK) |((mode << MODE_SHIFT) & MODE_MASK);
}

八、工程级技巧(非常重要)

1️⃣ 永远写 SHIFT + MASK 宏

不要写死数字。


2️⃣ 宽度计算公式

bit[a:b]

宽度:

width = a - b + 1

mask:

((1 << width) - 1) << b

这是通用公式。


九、我帮你建立一个终极脑图

所有位操作 = 4种

类型 公式
(reg >> shift) & mask
`(reg & ~mask) (val << shift)`
清零 reg &= ~mask
取反 reg ^= mask

就这四种。


十、为什么你在开发时会慌?

因为你没有形成这三个自动步骤:

① 画出bit位置
② 写出mask
③ 用 清零+写入 模式

只要这三步固定,你就不会乱。


十一、我给你一个训练方法(真的有效)

以后遇到寄存器:

不要直接写代码。

先在纸上画:

31                   0
|--------------------|[7:4]

写出:

mask =
~mask =
value << shift =

做 10 次你就熟了。


最后一句

你不是不会。

你只是:

没把它抽象成“清空盒子再填入”的固定流程。


http://www.jsqmd.com/news/416943/

相关文章:

  • 2月23日
  • 分析广东佛山信誉好的门店引流方法费用多少,性价比高吗 - mypinpai
  • 最新!2026江苏车铣复合培训学校排行情况,PLC培训/UG培训/车铣复合培训/走心机培训,车铣复合培训机构推荐排行 - 品牌推荐师
  • 2026船用安全阀市场:口碑企业引领安全新标准,船用疏水阀/船用减压阀/船用阀门附件,船用安全阀实力厂家口碑推荐 - 品牌推荐师
  • 2026年国内可靠的投影机出租公司排名,楼体投影机出租/艺术展览投影机出租/2万流明投影机出租,投影机出租公司哪家强 - 品牌推荐师
  • 2026年电商ERP系统推荐:多平台集成与数据安全评测,解决效率与合规核心痛点 - 十大品牌推荐
  • 想知道2026年2月受欢迎的成都火锅品牌有哪些?看这里,社区火锅/成都火锅/附近火锅/重庆火锅,成都火锅品牌推荐排行 - 品牌推荐师
  • 2026年知名的徽派仿古铝瓦/砖红色仿古铝瓦品牌厂家推荐哪家强 - 行业平台推荐
  • 20260226 总结
  • 2026年质量好的高温厂房节能改造/能源合同管理厂房节能改造销售厂家采购建议选哪家 - 行业平台推荐
  • 2026年电商ERP系统推荐:基于行业应用实测评价,针对成本与合规痛点精准指南 - 十大品牌推荐
  • 2026年西安物流公司推荐:基于多行业应用实测排名,针对供应链稳定性与专业化服务痛点 - 十大品牌推荐
  • 如何为不同规模电商选ERP?2026年电商ERP系统推荐与评测,直击效率痛点 - 十大品牌推荐
  • 位操作 之三
  • 如何选适配的电商ERP?2026年电商ERP系统推荐与评价,解决集成与扩展痛点 - 十大品牌推荐
  • 2026年口碑好的高速切铝机铝材切割设备/切铝机铝材机成型设备厂家推荐与选择指南 - 行业平台推荐
  • 微信立减金还在硬花?上京顺回收,闲置秒变现 - 京顺回收
  • 2026年电商ERP系统推荐:2026年技术趋势与稳定性排名,涵盖全渠道与安全痛点 - 十大品牌推荐
  • 2026年西安物流公司推荐榜单发布:以陕西互帮供应链为代表的标杆企业深度解析。 - 十大品牌推荐
  • 2月17日
  • 2026年电商ERP系统推荐:全渠道场景深度评测,涵盖订单与财务协同核心痛点 - 十大品牌推荐
  • 如何为不同规模选电商ERP?2026年电商ERP系统全面评测与推荐,直击扩展性痛点 - 十大品牌推荐
  • 2026年口碑好的塑料吹塑/异形吹塑人气实力厂商推荐 - 行业平台推荐
  • 位操作 之一
  • 2026年知名的管道防冻电伴热带/阻燃防爆电伴热带厂家实力参考 - 行业平台推荐
  • 2026年口碑好的搪玻璃三合一设备/山东不锈钢三合一设备厂家口碑推荐汇总 - 行业平台推荐
  • 2026年电商ERP系统推荐:基于行业应用实测评价,针对成本与协同痛点精准指南 - 十大品牌推荐
  • 2026年知名的澳洲移民职业匹配/澳洲移民政策解读哪家强生产厂家实力参考 - 行业平台推荐
  • 2026烘箱源头厂家推荐:技术实力与产品品质解析 - 品牌排行榜
  • 2026年宣城可靠的隐形车衣品牌企业,诚信企业有哪些 - 工业推荐榜