|| und &&
-
Guten Abend
in meinem Programm habe ich folgende Abfrage:
[...]
if(MyIntVar == (0||1||2)
{
[...]Das schein leider nicht zu funktionieren. Es funktioniert aber wenn ich schreibe:
[...]
if(MyIntVar == 0 || MyIntVar == 1 || MyIntVar == 2)
{
[...]Kann das auch irgendwie kürzer fasse so dass man die Variable nur einmal angeben muss?
-
Nein, so wie es da steht nicht. Wenn die Vergleichsfälle aber in einem Container liegen (z.B. ein Array oder ein std::vector), dann hilft std::find.
-
if(MyIntVar >= 0 && MyIntVar <= 2)
-
Machtl schrieb:
[...]
if(MyIntVar == (0||1||2)
{
[...]Das schein leider nicht zu funktionieren.
Die logische Oder-Verknüpfung von 0 || 1 || 2 ist true (da 0 für false und alles andere für true steht), da steht also eigentlich
MyIntVar == true, nicht unbedingt das, was du willst. Kann es sein, dass du von Visual Basic her kommst?
-
Die Idee von JustAnotherNoob ist zwar gut aber mein Beispiel ist vereinfacht (das habe ich wohl nicht besonders gut gemacht) in meine Programm liegen die Ints nicht beieinander.
Nö ich hab gleich mit C++ angefangen.
warum gibt 0 || 1 || 2 denn true zurück???
-
weil 0 false ist und alles was nicht 0 ist true ist.
und false || true || true ist true.
-
Machtl schrieb:
warum gibt 0 || 1 || 2 denn true zurück???
0x0000 || 0x0001 || 0x0002 ist wahr weil alles ungleich 0 Wahr ist.
Wenn du schreiben würdest: "falsch oder wahr oder wahr" ist dies nach boolischer Algebra nunmal wahr.
-
Das liegt daran, dass hier die ints als bool interpretiert werden und zwar so:
0 ist false
alles andere true
Da steht dann also für den Compilerfalse || true || trueund das ergibt nunmal true.
-
Achso ist das.
Wenn ich also nicht 0 || 1 || 2 sondern 0 && 1 && 2 schreiben würde, würde das false zurückgeben weil ein teil (0) false ist?
-
Machtl schrieb:
Wenn ich also nicht 0 || 1 || 2 sondern 0 && 1 && 2 schreiben würde, würde das false zurückgeben weil ein teil (0) false ist?
Ja.