プログラム内のすべての数値はコンピューター メモリにバイナリ形式で格納されており、ビット操作はメモリ内の整数のバイナリ ビットを直接操作することを知っています。たとえば、and 演算は本来論理演算子ですが、整数同士でも AND 演算を行うことができます。
ビット演算には主にシフト演算と論理演算があります。次に、シフト演算と論理演算についてそれぞれ説明します。
シフト演算:
左シフト: 演算子は << で、左に移動し、右側の下位ビットに 0 を追加し、左側の上位ビットを破棄して処理します。バイナリを整数として表す場合、1 ビット左にシフトすることは 2 を乗算することと同じです。符号なし右シフト: 演算子は >>> で、右に移動し、右側を破棄し、左側に 0 を追加します。符号付き右シフト: 演算子は >> で、右に移動し、右側を破棄します。左側に追加される値は、元の最上位ビットによって決まります。元が 1 の場合は 1 を追加し、0 の場合は 1 を追加します。 、0 を追加します。バイナリを次のように考えてください。整数の場合、それを 1 ビット右にシフトすることは、2 で除算することと同じです。
例:
int a = 4; // 100 a = a >> 2; // 001,等于1 a = a << 3 // 1000,变为8
論理演算には次のものが含まれます:
ビットごとの AND&: 両方のビットが 1 から 1 になる
ビットごとの OR|: 1 つのビットが 1 である限り、1 です
int a = ...; a = a & 0x1 // 返回0或1,就是a最右边一位的值。 a = a | 0x1 //不管a原来最右边一位是什么,都将设为1
int i = 1;// 二进制存储方式为00000000000000000000000000000001 int j = 5;// 二进制存储方式为00000000000000000000000000000101 int k = 6;// 二进制存储方式为00000000000000000000000000000110 if ((i & j) == 1) { System.out.println("j的最低位为1,为奇数"); } if ((i & k) == 0) { System.out.println("k的最低位为0,为偶数"); }
java ビデオ チュートリアル
)シナリオ 3: 単純なコレクション処理ナンセンスではありません。コードを見てください:
(n&(n-1))==0
public class SimpleSet { public static final int A = 0x01;// 最后四位为0001 public static final int B = 0x02;// 最后四位为0010 public static final int C = 0x04;// 最后四位为0100 public static final int D = 0x08;// 最后四位为1000 private int set = 0x00;// 初始0000,空集合 public void add(int i) {// 将i对应位的值置为1,重复add不影响。默认传入值为ABCD之一,此处省去边界判断 set |= i; } public boolean contain(int i) {// 判断相应位置是否为1 return (set & i) == i; } public boolean remove(int i) {// 来不及不解释了快看代码 if (contain(i)) { set -= i; return true; } else { return false; } } }
public static void main(String[] args) { SimpleSet set = new SimpleSet(); System.out.println(set.contain(A)); set.add(B); System.out.println(set.contain(A)); System.out.println(set.contain(B)); set.add(A); set.add(C); System.out.println(set.contain(A)); set.remove(A); System.out.println(set.contain(A)); System.out.println(set.remove(A)); System.out.println(set.contain(C)); }
Java 入門チュートリアル
以上がJava のビット操作とアプリケーション シナリオの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。