ビット単位の 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 サイトの他の関連記事を参照してください。