Binary:コンピュータは、10進数をサポートするプログラミング言語によって提供されるアルゴリズムを使用して、バイナリデータのみを処理できます。コンピュータの内部(Java)にはバイナリデータしかなく、プログラミング言語は、表示時に2進数を10進数に変換するAPIを提供します。コンピュータの表面はサポートしています10進数ですが、サポートされていません。
Javaには2つのメソッドがあり
ます。Integer.toString()はバイナリデータを10
進出力に変換しますInteger.parseInt()は10進文字列をバイナリデータに変換します
int n=45;
System.out.println(n);//45,其实对n做了Integer.toString(n)。如下
System.out.println(Integer.toString(n));//"45"
System.out.println(Integer.toBinaryString(n));//101101
int i=0;
System.out.println(Integer.toBinaryString(i++));//0
System.out.println(Integer.toBinaryString(i++));//1
System.out.println(Integer.toBinaryString(i++));//10
System.out.println(Integer.toBinaryString(i++));//11
System.out.println(Integer.toBinaryString(i++));//100
16進数:2 進数の省略形(省略2進数)に使用されます。2進数の書き込みが長すぎるため、2桁の4桁ごとが16進数に省略されます。この規則によれば、2進数の省略形を使用できます。バイナリデータを書き込む場合、16進数は省略形として使用されます。
//十六进制用于缩写二进制
int n=0xb5;//十六进制
System.out.println(Integer.toBinaryString(n));//二进制 :10110101
System.out.println(n);//十进制 :181
int m=0x5fdddb12;
System.out.println(Integer.toBinaryString(m));//1011111110111011101101100010010 高位自动省略
System.out.println(m);//1608375058
補数:「正の数」を使用して「負の数」を表すアルゴリズムであり、ハードウェアコストを節約します。
int n=-1;
System.out.println(Integer.toBinaryString(n));//11111111111111111111111111111111
System.out.println(Integer.toBinaryString(-2));//11111111111111111111111111111110
System.out.println(0);//0
for(int i=-10;i<10;i++){
System.out.print(Integer.toString(i)+" ");
System.out.println(Integer.toBinaryString(i));
}
int max=Integer.MAX_VALUE;
int min=Integer.MIN_VALUE;
System.out.println(Integer.toBinaryString(max));//1111111111111111111111111111111
System.out.println(Integer.toBinaryString(min));//10000000000000000000000000000000
System.out.println(min-max);//1
System.out.println(max+1);//-2147483648
System.out.println(min-1);//2147483647
int n=8;
int m=n+(max+1)*4;
System.out.println(m);//8
//补码的对称现象:-n=~n+1
n=8;
System.out.println(~n+1);//-8
System.out.println(Integer.toBinaryString(n));//1000
System.out.println(Integer.toBinaryString(~n));//11111111111111111111111111110111
System.out.println(Integer.toBinaryString(~n+1));//11111111111111111111111111111000
2項演算子:
1〜反転
2. >>> >> <<シフト演算
2.1)>>>論理右シフト演算:数値を右に移動し、上位ビットに0を追加し、下位ビットオーバーフローを破棄します
n = 01101101 00010001 11001001 10011011 m = n >>> 1
m = 001101101 00010001 11001001 1001101
2.2)<<論理左シフト演算:数値を左に移動し、下位ビットに0を追加し、上位ビットを
2.3で破棄します>>>および>>
:>>>右に移動すると、上位ビットは常に0で埋められ、負の数は数学的な除算規則に適合しません。
>>桁が右に移動し、上位ビットは1(負の数)、次に1が追加され、上位ビットは0(正の数)、次に0が入力され、符号ビットは維持されます。変更されていない、結果は数学除算の法則に従い、小さな方向に自動的に丸められます
2.4)シフト演算の古典的な使用:マスク演算と連携し、データを分割します
3.&| AND OR演算
3.1)&AND演算論理積: 1&1 = 1 0&1 = 0 1&0 = 0 0&0 = 0
計算規則:2つの数値は上下に整列され、対応する数字はAND
演算されますd = 01100011 00100110 00110111 11011110;
e = 00000000 00000000 00000000 11111111
f = d&e;
f = 00000000 00000000 00000000 11011110
クラシックの目的:データの最後の8ビットをインターセプト、マスク操作と呼ばれる
3.2)| OR操作:データをマージする
このルールは、加算1 | 1 = 1 0 | 1 = 1 1 | 0 = 1 0 | 0 = 0と同様です。
計算ルール:ビット数に応じて2つの数値が上下に整列OR演算
b1 = 00000000 00000000 00000000 10011101
b2 = 00000000 00000000 00000000 01101111
b3 = 00000000 00000000 00000000 11101111
b4 = 00000000 00000000 00000000 00110011
n =(b1 << 24)|(b2 << 16)|(b3 << 8)| b4
= 10011101 00000000 00000000 00000000
00000000 01101111 00000000 00000000
00000000 00000000 11101111 00000000
00000000 00000000 00000000 00110011
= 10011101 01101111 11101111 00110011
int n=0x6d11c99b;
// >>>逻辑右移位运算
int m1=n>>>1;
int k1=n>>>2;
System.out.println(Integer.toBinaryString(n));
System.out.println(Integer.toBinaryString(m1));
System.out.println(Integer.toBinaryString(k1));
// <<逻辑左移位运算
int m2=n<<1;
int k2=n<<2;
System.out.println(Integer.toBinaryString(n));
System.out.println(Integer.toBinaryString(m2));
System.out.println(Integer.toBinaryString(k2));
// >>>与>>
int a=-36;
int b=a>>1;
int c=a>>>1;
System.out.print(a+" ");
System.out.println(Integer.toBinaryString(a));
System.out.print(b+" ");//b=-18
System.out.println(Integer.toBinaryString(b));
System.out.print(c+" ");
System.out.println(Integer.toBinaryString(c));//??不符合数学规律
// &与运算
//将int d拆分为4个八位数 f1 f2 f3 f4
int d=0x632637de;
int e=0xff;
int f1=d&e;
int f2=(d>>>8)&e;
int f3=(d>>>16)&e;
int f4=(d>>>24)&e;
System.out.println(Integer.toBinaryString(d));//1100011 00100110 00110111 11011110
System.out.println(Integer.toBinaryString(e));//11111111
System.out.println(Integer.toBinaryString(f1));//11011110
System.out.println(Integer.toBinaryString(f2));//110111
System.out.println(Integer.toBinaryString(f3));//100110
System.out.println(Integer.toBinaryString(f4));//1100011