ビット単位の演算子は、PHPの整数でのみ動作し、整数の最大サイズは64ビットサーバでは2^63です。それより大きな値を作成すると、変数を浮動小数点にキャストし、ビット演算子が機能しなくなります。誤っiは整数のために大きすぎるた2^64に割り当て後者が2^63未満のthatsとしてこのビット単位のコードはどのように動作させることができますか?
<?php
$CAN_DANCE = 2;
$CAN_SING = 4;
$CAN_PLAY = 8;
$CAN_BEGOD = pow(2,64);
$userperms = $CAN_PLAY | $CAN_DANCE | $CAN_SING | $CAN_BEGOD;
if($userperms & $CAN_DANCE)
echo 'This will work';
if($userperms & $CAN_BEGOD)
echo 'This will not work';
?>
当然、最初のチェックのためにtrueを返すし、それ:私は、次の例を持っていますfalseを返します。それが2^63よりも大きく働くようにする方法はありますか?さもなければ、私はビットペルムを最大63の異なるアイテムにしか使用できません。この関数の戻り値はintため
これはまだ64の異なる項目です。あなたは2^0を忘れています。 – slebetman
それは本当ですか?整数| 0は0を返し、falseと解釈されるでしょうか?どちらの方法で解決策を知っていますか?もしそうなら、それは非常に感謝します、ありがとう! Dave –
@Dave 2^0 = 1、0ではない – FtDRbwLXw6