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

或运算无法还原原始值?已知a|b=c中a和c,如何求解b?

如何从 a | b = c(已知a和c)推导b的可能值?

先明确一个核心点:或运算(OR)是不可逆的——只靠a和c,你没办法得到唯一的b,只能确定b每一位的取值规则,进而得到所有符合条件的b。

先回顾下二进制或运算的单比特规则:
对于每一对对应比特位a_bit和b_bit,结果c_bit满足:

  • 0 | 0 = 0
  • 0 | 1 = 1
  • 1 | 0 = 1
  • 1 | 1 = 1

基于这个规则,我们可以逐位推导b的比特位限制:

逐位推导规则

  • 当c的某一位是0时:
    因为只有0 | 0 = 0,所以a的这一位必须是0(否则如果a是1,不管b是什么,结果都是1,和c的0矛盾),同时b的这一位必须是0。
  • 当c的某一位是1时:
    分两种子情况:
    1. 如果a的这一位是1:不管b是0还是1,结果都是1,所以b的这一位可以是0或1(两种可能)。
    2. 如果a的这一位是0:只有0 | 1 = 1,所以b的这一位必须是1。

用你的例子验证

已知a = 0011(二进制),c = 0111(二进制),我们把四位从左到右编号分析:

位序号a的比特c的比特b的比特规则可能取值
100必须为00
201必须为11
3110或1均可0/1
4110或1均可0/1

所以b的所有可能值是:

  • 0100
  • 0101(就是你例子里的结果)
  • 0110
  • 0111

这些值和a=0011做或运算,结果都会是0111。

总结

如果用位运算表达式概括b的取值范围:
b必须满足 (b & (~a)) == (c & (~a)),同时 (b & a) 可以是任意值(因为a的1位和b做或运算不影响结果)。换个更直白的说法:

  • b在a为0的那些位上,必须和c的对应位完全相同;
  • b在a为1的那些位上,可以自由取0或1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:55