You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对8位寄存器中的指定位进行位翻转操作?

8位寄存器指定位操作:置位与翻转

一、把指定位强制设为1(置位)

你的示例需求是将某些位固定设为1、不改动其他位,这时候不能用按位与&——按位与会把对应掩码位为1的部分清零,这就是你代码出错的核心原因。正确做法是用按位或运算符|:

示例1修正

unsigned char regVal = 0xB5; // 二进制:1011 0101
// 目标:将0-3位设为1,保留4-7位,预期结果1011 1111(0xBF)
unsigned char mask = 0x0F; // 0-3位为1的掩码,等价于0x01|0x02|0x04|0x08(你之前写的0x03是错误的,0x03仅对应0-1位)
unsigned char result = regVal | mask; // 计算结果:0xB5 | 0x0F = 0xBF

示例2修正

unsigned char regVal = 0x6D; // 二进制:0110 1101
// 目标:将4位(0x10)和7位(0x80)设为1,保留其他位,预期结果1111 1101(0xFD)
unsigned char mask = 0x80 | 0x10; // 掩码:10010000
unsigned char result = regVal | mask; // 计算结果:0x6D | 0x90 = 0xFD

二、真正的位翻转(0变1,1变0)

如果你的需求是让指定位不管原来值是什么,直接取反,这时候要用按位异或运算符^。比如:

unsigned char regVal = 0xB5; // 二进制:1011 0101
unsigned char mask = 0x0F; // 要翻转0-3位
unsigned char result = regVal ^ mask; // 结果:1011 1010(0xBA),原0-3位的0101翻转为1010

核心运算符总结

  • 置位(强制设为1):regVal | mask,掩码中目标位设为1
  • 清零(强制设为0):regVal & ~mask,掩码中目标位设为1,取反后用按位与清零
  • 翻转(0变1/1变0):regVal ^ mask,掩码中目标位设为1

内容的提问来源于stack exchange,提问作者jabroni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:01:14