Language agnostic XOR或NOT用于变量的求反

Language agnostic XOR或NOT用于变量的求反,language-agnostic,logical-operators,Language Agnostic,Logical Operators,在执行布尔变量的求反(XOR与否)时,我一直在想什么是更好的/首选的做法 bool someVariable; 我甚至不知道为什么,但我总是使用XOR,我更喜欢它: someVariable ^= true; 但是,更明显的方法是不使用: someVariable = !someVariable; 我可能使用的是第一种方法,因此我不需要键入两次变量名,从而减少了一些错误、键入错误等的可能性。如果变量长度超过几个字符,则键入的字符也会更少:) 然而,对于不使用此技巧的人来说,第一种方法在第一

在执行布尔变量的求反(XOR与否)时,我一直在想什么是更好的/首选的做法

bool someVariable;
我甚至不知道为什么,但我总是使用XOR,我更喜欢它:

someVariable ^= true;
但是,更明显的方法是不使用:

someVariable = !someVariable;
我可能使用的是第一种方法,因此我不需要键入两次变量名,从而减少了一些错误、键入错误等的可能性。如果变量长度超过几个字符,则键入的字符也会更少:)

然而,对于不使用此技巧的人来说,第一种方法在第一次查看时并不明显

此外,XOR更具可读性,因为您可以确保对变量应用了否定。不能使用两个不同的变量,如果名称相似,则很容易忽略:

affect = !effect;

这两种方法的优缺点是什么?我应该用什么?或者这只是个人喜好的问题?

我想你应该使用NOT方法,因为它更具可读性,人们可以立即理解发生了什么

我可能使用的是第一种方法,因此我不需要键入两次变量名,从而减少了一些错误、键入错误等的可能性。如果变量长度超过几个字符,则键入的字符也会更少:)

如果您使用的是IDE,那么无论哪种方式输入的字符都不会超过两个:)

然而,对于不使用此技巧的人来说,第一种方法在第一次查看时并不明显

绝对正确。我以前从未见过这种情况

我应该用什么?还是仅仅是个人喜好的问题


好吧,代码只写一次,但读了很多次,所以你应该选择大多数人认为更可读的方法,而且,这是“不”的方法。保留按位操作的按位运算符:)

IMHO您应该使用NOT方法,因为它的方式更具可读性,人们可以立即了解发生了什么

我可能使用的是第一种方法,因此我不需要键入两次变量名,从而减少了一些错误、键入错误等的可能性。如果变量长度超过几个字符,则键入的字符也会更少:)

如果您使用的是IDE,那么无论哪种方式输入的字符都不会超过两个:)

然而,对于不使用此技巧的人来说,第一种方法在第一次查看时并不明显

绝对正确。我以前从未见过这种情况

我应该用什么?还是仅仅是个人喜好的问题

好吧,代码只写一次,但读了很多次,所以你应该选择大多数人认为更可读的方法,而且,这是“不”的方法。保留按位操作的按位运算符:)

语义 始终选择语义合理的代码
someVariable^=true
肯定是正确的,但可能需要考虑它对不习惯此版本的否定的读者有什么作用(以及为什么)

someVariable=!某些变量
非常明确地说明了它在做什么:它否定了
someVariable
,没有任何解释它的可能性或要求

进一步影响 此外,可能有些代码分析软件可以用
做任何它能做的事情(优化、错误分析等等)-版本,但在相当意外的
^
-语句处失败。在编译过程中,XOR版本可能较慢,因为(取决于平台)可能需要在执行操作之前将
true
加载到另一个寄存器中。这种影响可能在所有情况下都可以忽略不计,但使用的附加寄存器可能不是 始终选择语义合理的代码
someVariable^=true
肯定是正确的,但可能需要考虑它对不习惯此版本的否定的读者有什么作用(以及为什么)

someVariable=!某些变量
非常明确地说明了它在做什么:它否定了
someVariable
,没有任何解释它的可能性或要求

进一步影响 此外,可能有些代码分析软件可以用
做任何它能做的事情(优化、错误分析等等)-版本,但在相当意外的
^
-语句处失败。在编译过程中,XOR版本可能较慢,因为(取决于平台)可能需要在执行操作之前将
true
加载到另一个寄存器中。这种影响可能在所有情况下都可以忽略不计,但使用的附加寄存器可能不是。

not(
)有几个优点:

  • 对于大多数需要修改代码的人来说,它更具可读性
  • 它通常比xor快(它得到两个参数,而不是只得到一个)
  • 使用短变量名时,键入所需的时间不会减少:

    例如,
    a=!a
    比a ^=true短
  • NOT(
    )有几个优点:

  • 对于大多数需要修改代码的人来说,它更具可读性
  • 它通常比xor快(它得到两个参数,而不是只得到一个)
  • 使用短变量名时,键入所需的时间不会减少:

    例如,
    a=!a
    比a ^=true短

  • 并不是因为它更具可读性,而是因为它实际上传达了您的意图。您希望对逻辑值求反,而不是执行异或操作。

    不是因为它更可读,而是因为它实际上传达了您要执行的操作。您希望对逻辑值求反,而不是执行异或操作。

    我想指出的异或方法的一个好处是,您不需要硬编码是否发生求反

    bool isNegated;
    //... later
    return value ^ isNegated;
    
    结束


    当我不介意引入分支时,为了可读性,我仍然使用后者。

    我想指出的XOR方法的一个好处是
    return isNegated ? !value : value;