ビット操作は 1 つの引数で複数のスイッチをマークします

たとえば、携帯電話には次のマーカーが付いている場合があります。

フラグ = 電話属性

  • 画面が破損していないか case1
  • バッテリーは充電されていますか2
  • カメラケースはありますか3
  • case4に電話してもいいですか?
  • Appleの携帯電話ケースですか5
  • 保証期間内ですか case6

通常、n 個のパラメータを格納するには bool 型を使用しますが、int または long を使用して格納することもできます。Java では、int は 4 バイトを占有し、各バイトは 8 ビット、合計 32 ビットを占有します。 store 32 マークは 32 個のブール値を保存します。

int 値のマークをビット演算で操作します。int 値自体の大きさには意味はなく、対応する 2 進数の位置のみに注目します。0 はマークなし、1 はマークを意味します。

フラグにフラグを追加

公式:

flag |= case1
flag |= case2
flag |= case2|case2

バイナリ計算のデモ:

flag            = 0000 0000
case1           = 0000 0001
case2           = 0000 0100
或运算后↓
flag            = 0000 0101

ジャッジメントマーク

公式:

//单个标记判断
bool = (flag & case1) != 0
//复合标记判断
bool = (flag & control) != 0

バイナリ計算のデモ:

flag            = 0000 0000
case1           = 0000 0001
与运算后↓
flag            = 0000 0000

マークを削除

公式:

flag &= ~case1

バイナリ計算のデモ:

case1           = 0000 0001
~case1          = 1111 1110
flag            = 0000 0001
flag&=~case1    = 0000 0000

チップ

複合ケースでない限り、0010 0001 のように単一の意味を持つケースが出現することはなく、マーク ビットが 2 つ出現することはなく、ケースの位置が競合することはありません。

ケースは Java の shift メソッドを使用して定義できます。

int flag = 0;       // 0000 0000 0000 0000 0000 0000 0000 0000
int case1 = 1;      // 0000 0000 0000 0000 0000 0000 0000 0001
int case2 = 1 << 1; // 0000 0000 0000 0000 0000 0000 0000 0010
int case3 = 1 << 2; // 0000 0000 0000 0000 0000 0000 0000 0100
int case4 = 1 << 3; // 0000 0000 0000 0000 0000 0000 0000 1000

サンプルコード

int flag  = 0 << 0;
int case1 = 1 << 0;
int case2 = 1 << 1;
int case3 = 1 << 2;
int case4 = 1 << 31;
//加标记
flag |= case1;
flag |= case2;
flag |= case3;
flag |= case4;
//验证标记
Assert.assertTrue((flag & case1) != 0);
Assert.assertTrue((flag & case2) != 0);
Assert.assertTrue((flag & case3) != 0);
Assert.assertTrue((flag & case4) != 0);
//删除标记
flag &= ~case1;
flag &= ~case2;
flag &= ~case3;
flag &= ~case4;
//验证标记
Assert.assertFalse((flag & case1) != 0);
Assert.assertFalse((flag & case2) != 0);
Assert.assertFalse((flag & case3) != 0);
Assert.assertFalse((flag & case4) != 0);

おすすめ

転載: blog.csdn.net/qq_27512671/article/details/108320354