Bat*_*eba 17

不可能.这是因为a & b是一种有损的转变.

你不知道任何丢弃的1位是否属于ab.

  • @Paulpro:我不同意.例如,如果c和a都为零,那么b可以是任何东西.我保持工作; 暂且. (3认同)
  • 我一直在考虑这个 - 这是一个有趣的问题 - 我得出结论,对某些值进行有损转换可能不足以成为没有反向运算符的理由.例如,乘法有一个反向,但它对于其中一个操作数`== 0`(就像`&&`)是有损的.我想知道是否有一个三值逻辑运算符`a?b`在哪里`0?.`未定义(就像`0/0')和`1?b`是`b`.我找不到一个. (2认同)

tin*_*lyx 17

没有这样的运算符,因为如果它存在,它将是不明确的:

所以让 a = 0, c = 0

我们有

a & 0 = c
a & 1 = c
Run Code Online (Sandbox Code Playgroud)

那么,我们应该有

c ?? a = 0   and  c ?? a = 1
Run Code Online (Sandbox Code Playgroud)

,但是在给定相同输入/参数的情况下,运算符/函数不能返回两个值.


Eag*_*nam 8

你不能.

0 && 0 == 0
1 && 0 == 0
Run Code Online (Sandbox Code Playgroud)

要扭转这一点,你需要一个运营商来回馈01.

(但如果b == 1你当然知道这一点a == c.)