質問

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)))を書いてテストします

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top