[英]XOR or NOT for negation of a variable
在执行布尔变量的否定,XOR 或 NOT 时,我在徘徊什么是更好/首选的做法?
bool someVariable;
我什至不知道为什么,但我总是使用 XOR,我只是更喜欢它:
someVariable ^= true;
但是,更明显的方法是使用 NOT:
someVariable = !someVariable;
我可能正在使用第一种方式,所以我不需要两次输入变量的名称,从而减少出现某些错误、拼写错误等的可能性。如果变量长于几个字符,输入的字符也会更少:)
但是,对于不使用此技巧的任何人来说,第一种方法在第一次查找时并不是很明显。
此外,恕我直言,XOR 更具可读性,因为您确定对变量应用了否定。 NOT 可能有两个不同的变量,如果名称看起来相似,很容易错过:
affect = !effect;
这两种方法的优缺点是什么? 我应该使用什么? 还是只是个人喜好问题?
始终选择语义合理的代码。 someVariable ^= true;
肯定是正确的,但可能需要考虑它对不习惯这种否定版本的读者的作用(以及为什么)。
someVariable = !someVariable;
对它在做什么非常明确:它否定someVariable
没有任何可能性也不需要解释它。
此外,它可能是一些代码分析软件,可以做任何它也许能(优化,误差分析,...)用!
-version,但在相当意外的^
语句中失败。 在编译期间,可能会发生 XOR 版本较慢的情况,因为(取决于平台)可能需要在执行操作之前将true
加载到另一个寄存器中。 这种影响可能在所有情况下都可以忽略不计,但使用的附加寄存器可能不是。
恕我直言,您应该使用 NOT 方法,因为它的方式更具可读性,并且可以立即理解发生了什么。
我可能正在使用第一种方式,所以我不需要两次输入变量的名称,从而减少出现某些错误、拼写错误等的可能性。如果变量长于几个字符,输入的字符也会更少:)
如果您使用的是 IDE,无论哪种方式,您都不会输入超过几个字符:)
但是,对于不使用此技巧的任何人来说,第一种方法在第一次查找时并不是很明显。
绝对真实。 我以前从未见过这个。
我应该使用什么? 还是只是个人喜好问题?
好吧,代码编写一次,但阅读多次,因此您应该选择大多数人认为更具可读性的选项,恕我直言,这是“非”方法。 为按位运算保留按位运算符:)
NOT ( !
) 有几个优点:
xor
快(它有两个参数而不只需要一个)当您使用短变量名时,输入不会少:
例如a =! a
a =! a
比a ^= true
短a ^= true
不是因为它更具可读性,而是因为它实际上传达了您打算做什么。 您想要否定逻辑值,而不是执行 XOR 操作。
我想指出的 XOR 方法的一个好处是,您不需要对是否发生否定进行硬编码。
bool isNegated;
//... later
return value ^ isNegated;
超过
return isNegated ? !value : value;
当我不介意引入分支时,我仍然使用后者来提高可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.