2016-08-31 9 views
0

Say I 2 Vergleichlogisch ODER bitweise ODER austauschbar?

haben
if ((length >= 524288) | (length == 0)) 
{ 
     //do something... 
} 

vs

if ((length >= 524288) || (length == 0)) 
{ 
     //do something... 
} 

sind dies die gleiche Sache, da, wenn Sie bit- oder 0001 0000 es in 1 dreht? Gibt es auch einen besonderen Grund, bitweises ODER in dieser Situation zu verwenden?

+4

Nr. 'If (p == NULL || p-> n> 10)' ist OK, aber 'if ((p == NULL) | (p-> n> 10))' hat undefiniertes Verhalten. –

+1

@AndrewL. Diese Antwort ist für C# ist das das gleiche wie C? – bakalolo

+0

Sie sind die gleichen genauen Operatoren und diese Operatoren sind universell in ihrem Betrieb – Li357

Antwort

2

In diesem Fall bitweise logische = da beiden Tests zurückgeben 0 oder 1.

Der einzige Unterschied zu einzelnen | dass das, was> das Ergebnis des ersten Tests ausgeführt werden beiden Teile des Tests = || hier verwenden .

+0

Wie bei der Kurzschlussauswertung von booleschen Ausdrücken. Es gibt also eine Di ff erenz, wenn der zweite Teil eine Nebenwirkung hat. –

+0

und Wenn Sie von einem Hardwareregister lesen, das beispielsweise alle 100 Millisekunden sicher gelesen werden kann, könnte dies einen Fehler auslösen. –

Verwandte Themen