Cheers and h..
7
bitlevel运算符的缺点.
你问:
"有什么理由不使用的位运算符&,|以及^为'在C++布尔’值?"
是的,逻辑运算符,即内置的高级布尔运算符!,&&并||提供以下优点:
保证将参数转换为bool,即为0和1有序值.
保证短路评估,一旦最终结果已知,表达式评估就会停止.
这可以解释为树值逻辑,具有True,False和Indeterminate.
可读文本等价物not,and并且or,即使我不使用他们自己.
正如读者锑的评论也指出了位级运营商的替代标记,即bitand,bitor,xor和compl,但在我看来,这些都是小于可读性and,or和not.
简而言之,高级运算符的每个这样的优点都是位级运算符的缺点.
特别是,由于按位运算符缺少参数转换为0/1,因此得到eg 1 & 2→ 0,而1 && 2→ true.此外^,按位排他或,可能以这种方式行为不端.被视为布尔值1和2是相同的,即true,但被视为位图,它们是不同的.
如何表达逻辑要么/或 C++中.
然后,您提供一些问题的背景,
"我有时遇到两种情况中只有一种情况要求为真(XOR)的情况,所以我只是将^运算符抛出一个条件表达式."
嗯,按位运算符的优先级高于逻辑运算符.这尤其意味着在诸如的混合表达中
a && b ^ c
你得到了意想不到的结果a && (b ^ c).
而只是写
(a && b) != c
更简明扼要地表达你的意思.
对于多个参数要么/或没有C++运算符来完成这项工作.例如,如果你写的a ^