作成日:2018-02-08, 更新日:2018-08-09
ビット積
・「$a & $b」 - $a および $b の両方にセットされているビットがセット
言葉で説明できないよ・・・。
パーミッションみたいに「〇〇を含む」ようなことをしたくて・・・
パーミッションは基本下記のような感じ。
・r - 1(読み込み権限)
・w - 2(書き込み権限)
・x - 4(実行権限)
例えば、
・権限「7」の人は「w」の権限を持っているか知りたい
・権限「5」の人は「w」の権限を持っているか知りたい
・・・みたいなコトをしたい。
define('PMS_R', 1); define('PMS_W', 2); define('PMS_X', 4); $val = 5; if ( $val & PMS_W ) { echo '「w」権限を持っている'; } else { echo '「w」権限を持っていない'; }
組み合わせとサンプル、結果
ソース | ($val & PMS_R) | ($val & PMS_W) | ($val & PMS_X) |
---|---|---|---|
echo (0 & PMS_○○○)? "含む": "含まない"; | 含まない(0) | 含まない(0) | 含まない(0) |
echo (1 & PMS_○○○)? "含む": "含まない"; | 含む(1) | 含まない(0) | 含まない(0) |
echo (2 & PMS_○○○)? "含む": "含まない"; | 含まない(0) | 含む(2) | 含まない(0) |
echo (3 & PMS_○○○)? "含む": "含まない"; | 含む(1) | 含む(2) | 含まない(0) |
echo (4 & PMS_○○○)? "含む": "含まない"; | 含まない(0) | 含まない(0) | 含む(4) |
echo (5 & PMS_○○○)? "含む": "含まない"; | 含む(1) | 含まない(0) | 含む(4) |
echo (6 & PMS_○○○)? "含む": "含まない"; | 含まない(0) | 含む(2) | 含む(4) |
echo (7 & PMS_○○○)? "含む": "含まない"; | 含む(1) | 含む(2) | 含む(4) |
echo (8 & PMS_○○○)? "含む": "含まない"; | 含まない(0) | 含まない(0) | 含まない(0) |
めも
上記の例だと「rwx」が下記のような内容。
10進数 | 2進数 | |
---|---|---|
r(読み込み権限) | 1 | 0001 |
w(書き込み権限) | 2 | 0010 |
x(実行権限) | 4 | 0100 |
「(10進数)5」の場合「(2進数)0101」となり「r(0001)」「x(0100)」が条件に合う。
・・・良い感じに説明できない。なんとなくこんな感じ。
例
- 「6 & 0」の場合→両方とも同じ場所に「1」が無いので「偽」となる
-
10進数 2進数 6 1 1 0 0 0 0 0 - 「6 & 1」の場合→両方とも同じ場所に「1」が無いので「偽」となる
-
10進数 2進数 6 1 1 0 1 0 0 1 - 「6 & 2」の場合→両方とも2桁目が「1」なので「真」となる
-
10進数 2進数 6 1 1 0 2 0 1 0 - 「6 & 3」の場合→両方とも2桁目が「1」なので「真」となる
-
10進数 2進数 6 1 1 0 3 0 1 1 - 「6 & 7」の場合→両方とも2、3桁目が「1」なので「真」となる
-
10進数 2進数 6 1 1 0 7 1 1 1