はじめにJavaのビット演算子
我々は、コンピュータは、小数点計算に下地バイナリ0と1,00100101であることを知っている1 + 0 + 1 * 1 * 2 ^ 2 ^ 2 + 0 + 0 * 2 ^ 3 ^ 2 * 4 + 1 * 2 5 + 2 ^ 0 * 37 ^ 6 =
1バイト= 8バイト(「ビット)、最上位ビットは0が負のために正のいずれかを表し、符号ビットです。
1.理論的な定義
(1)最上位ビットは符号ビットであり、正、0、負のための1。
(2)オリジナルコードの正数、反転、相補的コードは同じです。
(3)=負反転元のコードシンボルはそのままビット、他のビットは(0-> 0 0-> 1)で反転されます。
(4)=負その反転+1を補完する;補コード= 1を反転。
(5)抗補体コード0が0です。
(6)Javaのない符号なしの数、Javaの番号が署名されていません。
(7)で計算する際、それは、負第1のXOR小数点演算しなければならないであろう取得後算術を補完する方法ので、計算負ビット単位OR、ビット単位のAND、ビット単位の補数であります同時に、結果はまた、元のコードに、逆に変換され、負のタプル(1 ********)です。
2とビット単位のシフト演算子:
Javaは、4ビット演算、すなわち、「&ビット単位と、ビット単位または|、^ビット単位の排他的論理和、ビット単位の〜」は、計算ルールを:
ビットAND&:2つはすべて1、結果は1です。
ビットごとのORは|:一から二があり、結果は1です。
ビット単位のXOR ^:対応するビットの数が同じでない場合、同じ場合にのみ、それだけでは0であり、1ビットを取ります。
ビット単位〜:> 1 0-、1-> 0
3.Javaは、3つのシフト演算子があります。
>>算術右シフト:低オーバーフロー、不変の符号ビット、及び高い符号ビットとオーバーフローを満たします
<<算術シフト左:符号ビット定数、低い充填0
>>>論理右シフト:低オーバーフロー、高いフィル0
例:
示例1:~2:
原数按位取反得到负数元组(补码),所以要转成反码,然后转成原码
原数:00000010
取反:11111101 这个结果是补码
反码:11111100
结果:10000011 结果-3
示例2:2&3
00000010
00000011
结果:00000010 结果:2
示例3:2|3
00000010
00000011
结果:00000011 结果3
示例4:~-5
因为计算机计算都按补码计算,所以先获取-5的补码,然后包括符号位在内全部0变1,1变0,获取结果
原码:100000101
反码:111111010
补码:111111011
结果:000000100 结果:4
示例5:-3^3
-3原码:100000011
反码:111111100
补码:111111101
00000011
结果:11111110(这是补码)
补码:11111110加上-1的补码111111111结果是1111111101取反100000010 结果-2