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

关于无符号char右移后按位与操作含义及代码逻辑的验证问询

关于无符号char位操作的疑问解答

1. 无符号char右移后按位与的含义

咱们拆解下这两个操作的核心作用:

  • 无符号右移(>>):对于unsigned char(8位二进制数),这是逻辑右移——所有位向右移动指定位数,左边空位用0填充,不会像有符号数那样用符号位补位。比如0b10000000右移7位后,会变成0b00000001。
  • 按位与(&):和0x1(二进制0b00000001)做按位与,本质是提取最低位的状态——只有最低位和1相与能保留原值,其他位和0相与都会变为0,最终结果只能是0或1。

把两者结合,就是把目标位移动到最低位,然后单独提取该位的0/1状态,这是嵌入式或底层代码里常用的“位提取”技巧。

2. 你对代码的理解是否正确?

很遗憾,你的理解有偏差哦,咱们来逐行分析这段代码:

unsigned char state = portStates[portNumber];
int bitValue = (state >> 7) & 0x1;
  • state >> 7:是把state的**最高位(第7位,8位二进制数从0开始计数,0是最低位,7是最高位)**向右移动7位,挪到最低位的位置。
  • 再和0x1相与,最终得到的是state最高位的0/1值,而不是最低位。

如果要判断state是奇数还是偶数,应该提取最低位,代码可以写成:

int isOdd = state & 0x1; // 结果为1则是奇数,0则是偶数

或者等价的(state >> 0) & 0x1,不过直接写state & 0x1是更简洁的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:35:17