ホームページ >バックエンド開発 >PHPチュートリアル >[PHP] ビット単位の AND & or | XOR ^ の基本的な使用法

[PHP] ビット単位の AND & or | XOR ^ の基本的な使用法

little bottle
little bottle転載
2019-04-16 15:26:593556ブラウズ

ビット単位の AND:
0&0=0; 0&1=0; 1&0=0; 1&1=1;
ビット単位の OR:
0|0=0; 0|1=1; 1| 0= 1; 1|1=1;
ビットごとの XOR、OR に基づく、1 1 も 0:
0^0=0; 0^1=1; 1^0=1; 1^1 =0;

1. 10 進数を格納する int フィールド (例: 5
)。その後、2 進数に変換された数値は 101 になります。これを自分で定義し、左から右に数えます。
1 桁目は 1、特定の機能の自動転送がオンであることを意味します。
2 桁目は 0、自動削除がオフであることを意味します。
3 桁目は 1、つまり自動保存がオンであることを意味します。

2. 3 桁目が自動保存をオンにするコードであるかどうかを確認します

($userStatus & pow(2,3-1))!=0

3.pow は、2 の 2 乗の指数表現関数であり、次のように変換されます。 2 進数では 0100、0101 と 0100 のビットごとの AND は 0100、10 進数では 4 なので、「0 に等しくない」は true
4. 特定のビットの値を設定します。 1、コードは

$userStatus | pow(2,3-1)


元の値は 0001 で、3 番目のビットを 1,0001 | 0100 は 0101
5 に設定します。特定のビットを次のように設定します。 0、コードは

$userStatus ^ pow(2,3-1) 0101 ^ 0100 为0001

[推奨コース: PHP ビデオ チュートリアル ]

function setStatus($source,$flag,$value){
        if (intval($value) == 1 || strcasecmp($value, 'on') == 0) {
            $value = 1;
        } else {
            $value = 0;
        }   

        $status = pow(2, $flag - 1); 
        $oldStat = (($source & $status) != 0); 
        if ($oldStat == $value) {
            return $source;
        }   
        if ($value) {
            $source |= $status;
        } else {
            $source ^= $status;
        }   
        return $source;
}
//001 转成 101 
var_dump(setStatus(1,3,'on'));//int(5)
//1101 转成 0101
var_dump(setStatus(13,4,0));//int(5) 
  

以上が[PHP] ビット単位の AND & or | XOR ^ の基本的な使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。