Ben PHP yankılanırken içinde neden bu ifadeyi anlamıyorum 'whaaa?' - (0x0F | 0xF0)
hayır 0xFF
olmalıdır?
if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
Bu komut sonucu:
var_dump((0x0FFFFFFF));
var_dump((0xF0FFFFFF));
var_dump((0x0FFFFFFF | 0xF0FFFFFF));
var_dump((0xFFFFFFFF));
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF));
olduğunu
int(268435455)
float(4043309055)
int(-1)
float(4294967295)
bool(true)
PHP converts hexadecimal numbers larger than 31 bits into floats, as an integer olduğunu signed, and can therefore only hold 31 positive bits.
Onaltılık sayılar imzasız, bu nedenle dönüşüm mantıklı.
The first "or" operation converts the float into an integer, as it doesn't make sense to perform an "or" on a float. So PHP converts the float to an int for the or, the result olduğunu an int, but the next hexadecimal conversion olduğunu a float, and the values are not the same.
To convert the float to a integer in a bitwolduğunue fashion, OR it with 0x0:
var_dump((0xFFFFFFFF | 0x0));
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF | 0x0));
Sonuçları
int(-1)
bool(false)