PHPでこのステートメントが正しいのはなぜですか?
-
06-07-2019 - |
質問
PHPのこのステートメントが「whaaa?」とエコーする理由がわかりません。 -(0x0F | 0xF0)
は 0xFF
no?
if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
解決
このスクリプトの結果:
var_dump((0x0FFFFFFF));
var_dump((0xF0FFFFFF));
var_dump((0x0FFFFFFF | 0xF0FFFFFF));
var_dump((0xFFFFFFFF));
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF));
is
int(268435455)
float(4043309055)
int(-1)
float(4294967295)
bool(true)
整数は符号付きであるため、PHPは31ビットより大きい16進数を浮動小数点数に変換するため、正の31ビットのみを保持できます。
16進数は符号なしなので、変換は理にかなっています。
最初の「または」操作は、フロートを整数に変換します。「または」を実行する意味がないためです。フロート上。したがって、PHPはorのfloatをintに変換します。結果はintですが、次の16進変換はfloatであり、値は同じではありません。
フロートをビット単位で整数に変換するには、または0x0を使用して:
var_dump((0xFFFFFFFF | 0x0));
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF | 0x0));
結果
int(-1)
bool(false)
-アダム
他のヒント
var_dump((0x0FFFFFFF | 0xF0FFFFFF)))を書いてテストします
所属していません StackOverflow