【发布时间】:2014-07-06 18:41:22
【问题描述】:
我听说除了 0 之外的“一切”通常都是真的。但是现在非常奇怪的事情发生在我身上......或者我只是认为我以正确的方式做这件事而我没有。以下是正在发生的事情:
当我想检查 a 是否等同于 b 时,我可以使用NOT(a XOR b)。例如,当我检查unsigned char 时,一切正常
unsigned char a = 5;
unsigned char b = 3;
unsigned char c = ~(a^b);
给我c == 249:
a 是:00000101,即 5。
b 为:00000011,即 3。
~(a^b) 为:11111001,即 249。
现在,让我们用bool's 试试这个。
cout << ~(true^true) << ~(true^false) << ~(false^true) << ~(false^false) << endl;
cout << ~(~(true^true)) << ~(~(true^false)) << ~(~(false^true)) << ~(~(false^false)) << endl;
if (~(true^true) == true)
cout << "true";
else
cout << "false";
这给了我控制台:
-1-2-2-1
0110
false
虽然我预计第一行是:
1001
问了一个朋友后,他建议我试试!而不是~,看看它是否能正常工作。而且(我认为)它现在可以正常工作。但我不明白为什么。布尔否定不应该对布尔值起作用吗?
【问题讨论】:
-
布尔否定确实适用于布尔值。 bitwise-NOT 没有。
-
A
bool不止一位。 ~ 翻转每一位。 -
它是真的,它只是不等于到
true。 -
我们有多少种否定?我正在使用这个页面:cplusplus.com/doc/boolean,并且只提到了一个。
-
@Kusavil Kerrek 得到了一个很好的答案,你一定要读一读。
标签: c++ boolean boolean-expression boolean-operations