Frage

Ich verstehe nicht, warum diese Aussage in PHP echos 'whaaa?' - (0x0F | 0xF0) sollte 0xFF nicht sein

if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
War es hilfreich?

Lösung

Das Ergebnis dieses Skript:

var_dump((0x0FFFFFFF)); 
var_dump((0xF0FFFFFF)); 
var_dump((0x0FFFFFFF | 0xF0FFFFFF)); 
var_dump((0xFFFFFFFF)); 
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF));

ist

int(268435455)
float(4043309055)
int(-1)
float(4294967295)
bool(true)

PHP wandelt hexadezimale Zahlen größer als 31 Bits in Hin- und Herbewegungen, wie eine ganze Zahl signiert ist, und daher nur 31 Bits positive halten.

Hexadezimalzahlen sind nicht signiert, so dass die Umwandlung Sinn macht.

Die erste „oder“ Operation wandelt den Schwimmer in eine ganze Zahl, da es keinen Sinn macht, einen „oder“ auf einem Schwimmer auszuführen. So PHP wandelt den Schwimmer in einen int für die oder das Ergebnis ist ein int, aber die nächste hexadezimale Umwandlung ist ein Schwimmer, und die Werte sind nicht das gleiche.

den Schwimmer auf eine ganze Zahl in einem bitweise zu konvertieren, oder mit 0x0:

var_dump((0xFFFFFFFF | 0x0)); 
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF | 0x0));

Ergebnisse in

int(-1)
bool(false)

-Adam

Andere Tipps

Testen Sie es durch var_dump((0x0FFFFFFF | 0xF0FFFFFF)) Schreiben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top