Warum ist diese Aussage wahr in PHP?
-
06-07-2019 - |
Frage
Ich verstehe nicht, warum diese Aussage in PHP echos 'whaaa?' - (0x0F | 0xF0)
sollte 0xFF
nicht sein
if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
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