Ich habe gehört, dass oft "alles" außer 0 ist wahr. Aber jetzt passieren mir sehr seltsame Dinge ... oder ich denke nur, dass ich es richtig mache, während ich es nicht tue. Hier ist, was passiert:Warum ~ (wahr^wahr) ist nicht wahr? Boole'sche Operatoren (Negation) funktionieren für `unsigned char`s, aber nicht für Bools? (C++)
Wenn ich überprüfen möchten, ob ein entspricht b, ich NOT(a XOR b)
verwenden können. Als ich es für unsigned char
‚s überprüft, alles war in Ordnung, zum Beispiel
unsigned char a = 5;
unsigned char b = 3;
unsigned char c = ~(a^b);
gab mir c == 249
:
eine ist: 00000101
, die 5. ist
b ist: 00000011
, das ist 3.
~ (a^b) ist: 11111001
, das ist 249.
Jetzt versuchen wir dies mit 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";
Das gibt mir in der Konsole:
-1-2-2-1
0110
false
, während ich die erste Zeile zu erwarten:
1001
Nach einem Freund zu fragen, riet er mir !
statt ~
zu versuchen, und sehen, ob es richtig funktioniert. Und (ich denke) es funktioniert jetzt richtig. Aber ich verstehe nicht warum. Sollte boolesche Negation für Bools nicht funktionieren?
Boolesche Negation * macht * Arbeit für booleans. Es ist * bitweise-NICHT * das nicht. –
Ein Bool hat mehr als ein Bit. ~ dreht jedes Bit um. – chris
Es * ist * wahr, es ist einfach nicht * gleich * wahr '. –