この記事では、最初の個人的なマイクロチャネル公共番号に登場し、あなたの注意を楽しみにして「andyqian」〜
序文
我々は、すべての複雑な、コンピュータの世界であることを知って、その後、最終的には米国のプログラムは、0と1になります。つまり、私たちはしばしば言う:バイナリ。バイナリ私たちは精通していると信じています。違いは、現実の世界と、現実の世界では、我々は通常、小数点以下の場合には、小数、と表現されていることである、これらは私たちに精通しています。ここで、我々は同じではありませんコンピュータ進小数計量単位と現実の世界への手がかりを見つけるでしょう。そして、どのようにそれらの間で変換するには?これは、より基本的なコンピュータの知識の一部を必要とします。私たちは(興味があれば、あなたは次の時間について話すことができます)この資料に記載されていません。ああ、戻って今日のトピックには、ビットコンピューティング、これは概念の一種でありますか?我々は、これらの算術演算の現実の世界との接触、つまり、10進法計算に入って来た持って来られました。私たちが言っている今日は:いくつかの一般的な操作のビット。例えば:・(ビット)、|(又はビット) 、^ (XOR) 、<<(左シフト)、>>(右) など。
真と偽
オペレータの使用を行う前に、我々は次の真と偽のことを言う必要があります。Javaでは、私たちは皆知っている、真真、偽の値が示す値がfalseを表します。実際には、コンピュータで、通常1 0、真のために偽のために。使用済みのJSON学生は1もtrueにデシリアライズすることができます使用して、Javaのboolean型ことを知っている必要があり、0はfalseにデシリアライズさ。
&(ビット)
我々がよく知っているとしましょう、と言って前のビット && 論理AND演算。要するに:&& Bは:場合、AとBが真と偽の確立しながら、さもなければ。それは呼ばれていた:「偽は偽でなければなりません。」
今、私たちは、位置を見てください。まずは、プログラムを見てみましょう:
@Test
public void testBit(){
int a = 8;
int b = 9;
System.out.println("a binary: "+Integer.toBinaryString(a));
System.out.println("b binary: "+Integer.toBinaryString(b));
System.out.println("a & b binary: "+Integer.toBinaryString(a&b));
System.out.println("a & b result: "+(a&b));
}
前に説明したように見え、の結果はどのくらいだと思いましょうか?
コードの説明:
ビットと:私たちまで理解の文字通りの意味から、だけでなく、ビット操作。
-
8進数は以下のとおりです。1000年。
-
1001:10進数の桁が9です。
私たちは、運転中に配置することがあります:
次のように:
8:1000
9:1001
&
8 1000
&左端1 = 1、0&中央0 = 0、0&右端= 0 1。
バイナリ結果:1000は、8を10進数に変換しました。
次のようにプログラムの結果は以下のとおりです。
a binary: 1000
b binary: 1001
a & b binary: 1000
a & b result: 8
結果は予想に沿ったものです。
|(またはビット)
それは言う &(ビット) の操作、そして今、我々は動作位置を見てみましょうか、上記の例を継続して使用する:次のように:
@Test
public void testBit(){
int a = 8;
int b = 9;
System.out.println("a binary: "+Integer.toBinaryString(a));
System.out.println("b binary: "+Integer.toBinaryString(b));
System.out.println("a & b binary: "+Integer.toBinaryString(a|b));
System.out.println("a & b result: "+(a|b));
}
バイナリを見てください:
8:1000
9:1001
|
9 1001
左端の1 | = 1、0の真ん中| 0 = 0、右端の0 | 1 = 1。
バイナリの結果:1001は9進に対応します。
次のように計算結果は以下のとおりです。
a binary: 1000
b binary: 1001
a & b binary: 1001
a & b result: 9
^(排他OR)
異なる:この演算子はもっと面白い、イソブチルは文字通り理解されています。内部で動作するビットが同じです。上記の例を使用して続行します。
@Test
public void testBit(){
int a = 8;
int b = 9;
System.out.println("a binary: "+Integer.toBinaryString(a));
System.out.println("b binary: "+Integer.toBinaryString(b));
System.out.println("a & b binary: "+Integer.toBinaryString(a^b));
System.out.println("a & b result: "+(a^b));
}
バイナリを見て続行します。
8:1000
9:1001
^
1 0001
フェーズ偽ながら、同時にテイクでは真実ではありません。1 = 0であり、残す取る左に同じです。中間はまた、0 0 = 0はfalseです。右端の0が1に等しい、真ではありません。結果も1。
<<左
現実の世界では、私たちはしばしば乗算を使用しています。<<バイナリシフト演算、低0を示しています。たとえば、次の8 << 1。
@Test
public void testCode(){
int a =8;
System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
System.out.println("a<<1 toBinaryString: "+Integer.toBinaryString(a<<1));
System.out.println("result: "+(a<<1));
:次のようにバイナリ
8 1000
8<<1
16 10000
結果:2 ^ 4 = 16。<<ビット数が移動する場所を必要と右に、ベースの左側を表します。矢印は側が変位する側を指します。プログラムの結果:
a toBiryString: 1000
a<<1 toBinaryString: 10000
result: 16
>>右
>>(右)と左<<反対、高い0です。上記の例を続行します。
@Test
public void testCode(){
int a =8;
System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
System.out.println("1>>a toBinaryString: "+Integer.toBinaryString(a>>1));
System.out.println("result: "+(a>>1)
}
バイナリ:
8 : 1000
8>>1
4 : 0100
結果:
a toBinaryString: 1000
a>>1 toBinaryString: 100
result: 4
実際には、数式を覚えてすることは比較的容易であります。
A >> N示す:乗/(2 ^ n)を。(四捨五入)
<< Nの結果は次のとおり乗*(2 ^ N)。
今の高速カウントしてみましょう:
場合= 13、N = 2。<< 2 13 13 * 4 = 52に等しいです。13/4 = 3。
(彼女の顔を歓迎するために、間違っている場合は、高速アルゴリズムの上!!!)
我々は、ソースと変位操作共通のアルゴリズムは、マスタビット・コンピューティングへのJavaプログラマが必要であり、非常に一般的です。理解することが、当社のアルゴリズム、ソースコードに非常に便利です!
関連読書:
「道のソフトウェア。」
スキャンコード進行とともに、関係
個人ブログ:http://www.andyqian.com