이 진술이 PHP에서 왜 사실입니까?
-
06-07-2019 - |
문제
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))
제휴하지 않습니다 StackOverflow