アクセス権を3ビットの整数で表し、読取り=4(100)、書込み=2(010)、実行=1(001)を足し合わせる。既存の権限を変えずに、読取りと書込みの両方を持つかを調べたい。ANDは各ビットの論理積、ORは各ビットの論理和を表すとき、判定式として適切なものはどれか。
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:ウ (権限 AND 6) = 6
この表示だけでは、回答数や正答率は変わりません。
解説
読取りと書込みのマスクは100 OR 010 = 110で、10進数6です。権限 AND 6の結果が6なら、必要な二つのビットが両方とも立っています。実行権の有無は問わないので、権限6だけでなく7も受け付ける必要があります。
どちらか片方のビットがあるだけでも真になります。権限4で成立するため「両方」を確認できません。
権限0でも0 OR 6 = 6となり、必要な権限を持たない利用者を受け付けてしまいます。
必要なビットを取り出し、そのすべてがそろうことをマスクとの一致で確かめています。
読取り・書込みに加え実行も持つ権限7を拒否してしまい、要件より厳しい判定です。
関連知識
「必要な権限を一つでも持つ」はAND結果が0でないこと、「すべて持つ」はAND結果が必要マスクと等しいことで調べられます。権限が4、6、7のときの真偽を表にすると違いを確認できます。
間違えやすいポイント
AND結果が0でなければ十分、と即断しないこと。「どれか」と「すべて」で比較する条件が違います。追加のビットがある利用者を排除しないことも確認します。
覚え方
全部必要なら、ANDした結果がマスクそのもの。
実務での意味
複数機能の有効・無効をビットで保存する場合に、必要なフラグが全部そろうかを検査します。実際の認可は対象データや利用者との関係も含めて判断します。
解説:本サイト編集部によるオリジナル文章