Neden bu açıklama PHP doğrudur?

2 Cevap php

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?';

2 Cevap

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)

Yazarak bunu test var_dump((0x0FFFFFFF | 0xF0FFFFFF))