문제

PHP Echos 'whaaa'에서 왜이 진술이 왜? ' - (0x0F | 0xF0) 해야한다 0xFF 아니요?

if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
도움이 되었습니까?

해결책

이 스크립트의 결과 :

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

~이다

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

PHP는 정수가 서명되므로 16 진수를 31 비트보다 수레로 변환하므로 31 개의 양의 비트 만 보유 할 수 있습니다.

16 진수 숫자는 서명되지 않으므로 변환이 의미가 있습니다.

첫 번째 "또는"작업은 플로트를 정수로 변환합니다. 따라서 PHP는 플로트를 OR의 int로 변환하면 결과는 int이지만 다음 16 진전 변환은 플로트이며 값은 동일하지 않습니다.

플로트를 약간의 방식으로 정수로 변환하거나 0x0으로 :

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

결과

int(-1)
bool(false)

-아담

다른 팁

서면으로 테스트하십시오 var_dump((0x0FFFFFFF | 0xF0FFFFFF))

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top