C# 基于另一个布尔值求反布尔值

C# 基于另一个布尔值求反布尔值,c#,bit-manipulation,C#,Bit Manipulation,在不写两次b的情况下,写C#代码最后一行的简短、优雅、按位方式是什么 bool getAsIs = .... bool b = .... getAsIs ? b : !b 尝试使用二进制XOR(): 我想是的 var foo = !(getAsIs ^ b) 身材矮小,优雅,但绝对是个令人挠头的人 真值表可以表示为: getAsIs b getAsIs ? b : !b -------------------------------- 0 0 1 0

在不写两次
b
的情况下,写C#代码最后一行的简短、优雅、按位方式是什么

bool getAsIs = ....
bool b = ....

getAsIs ? b : !b
尝试使用二进制XOR():

我想是的

var foo = !(getAsIs ^ b)

身材矮小,优雅,但绝对是个令人挠头的人

真值表可以表示为:

getAsIs    b    getAsIs ? b : !b
--------------------------------
0          0    1
0          1    0
1          0    0
1          1    1
result = (getAsIs == b);
结果可以表示为:

getAsIs    b    getAsIs ? b : !b
--------------------------------
0          0    1
0          1    0
1          0    0
1          1    1
result = (getAsIs == b);

我想知道你为什么会这样做?仅仅因为写了两次
b
?演出我不认为这些都是一个深刻的原因。为了简洁性/可读性和性能,因为在我的例子中,达到“b”实际上涉及到取消引用三个属性。我非常确定VM/编译器将以任何方式(取消引用以及指令)对此进行优化,但如果被证明是错误的,那将非常有趣。比特旋转肯定不会提高可读性:我怀疑VM/编译器的解引用会影响运行时行为,但如果证明它是错误的,那将很有趣。消除重复代码无疑是提高可读性的一个好处。实际上,我可以用这个答案来重新解释我的问题。也就是说,我可以将“getAsIs”重命名为“targetValue”。PlusOne-正是我所寻找的!