C#. Mi értelme van || és && operátorok helyett | és & operátort használni?
logikai "és": &&
logikai "vagy": ||
bináris "és": & (boolnál sima logikai "és", integernél bitwise)
bináris "vagy" | (boolnál sima logikai "vagy", integernél bitwise)
Akkor van értelme ha a kiértékelendő kifejezéseknek valamilyen mellékhatása van, amit minden esetben szeretnénk ha lefutna.
Tipikus példa:
if (x++ > n || y++ > n)
Utolsó:
Amúgy tényleg így van, de semmibe se kerül nem hákolni és leírni több sorba :D
Youtuben is vannak jó videók. Ezt a példád amúgy nem értem:
if (x++ > n || y++ > n)
Mivel senki sem adott még rá értelmes választ, ezért elmagyarázom, mik is ezek.
Vegyük először az első kettőt.
bool X, Y;
bool OrResult = X || Y;
bool AndResult = X && Y;
Látható, hogy a || és a && operátorok logikai (bool típusú) eredményt képeznek. A || a logikai VAGY műveletet jelenti. OrResult akkor lesz true, ha X true, vagy Y true, vagy mindkettő true. Ha X és Y mindketten egyszerre false, akkor false lesz az eredmény.
A && a logikai ÉS műveletet jelenti. AndResult csak akkor lesz true, ha X és Y mindkettő egyszerre true. Ha legalább az egyik false, akkor AndResult is false lesz.
A másik két csoport már érdekesebb.
int X = 21, Y = 55;
Írjuk fel mindkettőt bináris számrendszerben:
X = 0001 0101
Y = 0011 0111
int BitwiseOrResult = X | Y;
A | operátor a bitenkénti VAGY műveletet hajtja végre. Ha a 0-t false-nak, az 1-est true-nak tekintjük, akkor ugyanazt kell eljátszani, mint a || operátornál, csak itt minden egyes bitre. Ha a két szám bináris alakját egymás alá írjuk fel, akkor két egymás alatt lévő bitre kell elvégezni a logikai VAGY műveletét.
0001 0101 (X)
0011 0111 (Y)
-- -- -- -- -- -- -
0011 0111 (BitwiseOrResult)
Ha az eredményt visszaírjuk tízes számrendszerbe, láthatjuk, hogy a BitwiseOrResult értéke 55 lett.
Hasonló a helyzet a & operátor esetében, csak ott bitenként a logikai ÉS műveletét végezzük el:
int BitwiseAndResult = X & Y;
0001 0101 (X)
0011 0111 (Y)
-- -- -- -- -- -- -
0001 0101 (BitwiseAndResult)
Ezt szintén tízes számrendszerbe visszaírva az eredmény 21 lesz.
Lillácska már megint csak az okoskodás megy...
Nem a bináris operátorokról volt szó, hanem a mohó kiértékelésű logikai operátorokról.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!