3

これが可能であることは知っていますが、単にそれが何と呼ばれているのかわからないだけで、Google はあまり役に立ちませんでした。

A、B、C、D の 4 つのオプションから選択できるとします。ユーザーが A と C を選択した場合は、選択を 5 = 0101 として保存するか、ユーザーが D (1000) を選択した場合は 8 として保存できます。

私の質問は、5 を保存した後で A=1、B=0、C=1、D=0 に戻すにはどうすればよいですか?

映画の年齢制限を保存しようとしていますが、これが最善の方法かもしれないと考えました。

4

3 に答える 3

1

ビット演算を使用できます。基本的に、2 つ以上の数値に対してビットごとのORを実行し、テストする数値に対してビットごとのANDを実行して、数値が OR されたかどうかを確認することで効果を達成します。

例:

ユーザーに流暢な言語を選択してもらいたいとします。表示するオプションは、英語、ドイツ語、ロシア語、スペイン語です。
まず、オプションを 2 の累乗で定義することから始めます。

$LANGUAGE_ENGLISH = 2;
$LANGUAGE_RUSSIAN = 4;
$LANGUAGE_GERMAN = 8;
$LANGUAGE_SPANISH = 16;

ユーザーが英語とロシア語を選択したとします。次のようにオプションを組み合わせます。

$selected_options = 0; // we'll store the result in here
$selected_options = $LANGUAGE_ENGLISH | $LANGUAGE_RUSSIAN;
//It can also be express as:
//$selected_options |= $LANGUAGE_ENGLISH;
//$selected_options |= $LANGUAGE_RUSSIAN;


$selected_options変数には、ユーザーのオプションが含まれるようになりました 。オプションが格納されているかどうかを確認するには、ビットごとの AND を実行します。結果が 0 の場合、値は保存されていません。それ以外の場合、値は格納されました。
例:

if ($selected_options & $LANGUAGE_ENGLISH != 0)
    echo "English was selected";
else
    echo "English was NOT selected";

要件:

すべての数値には、重複しないビットが必要です。3重複を避ける最も簡単な方法は、2 の累乗の数字のみを使用2すること2です。ただし、 はまたはと1重複しないため、両方で使用できます。24

1: 0001
2: 0010
3: 0011
4: 0100

それが役立つことを願っています

于 2013-08-05T11:55:10.713 に答える