JAvaのシフト操作の詳細、左シフトと右シフト

3316 ワード

に注意
まず、この中のすべての操作はコンピュータに格納されたバイナリの操作であることを理解しなければならない.では、正数はコンピュータではバイナリで表され、負数はコンピュータでは補符号で表されることを知っておく必要がある.
符号付き変位
左シフト:<
右シフト:>>符号のあるシフト操作右シフト操作は、演算数のバイナリコード全体を指定ビット数だけ右シフトし、右シフト後の空席は符号ビットで補完し、正数であれば0で補完し、負数であれば1で補完する.
public static void main(String[] args)
{

    System.out.println(3<<2);//3  2 
    System.out.println(-3<<2);//-3  2 

    System.out.println(6>>2);//6  2 
    System.out.println(-6>>2);//-6  2 

}

出力結果
12-12 1-2分析:
00000000 00000000 00000000 00000001+3コンピュータで00000000 00000000 00000000 00000001100左に2桁移動し、結果は12————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————补充コードですが、元のコード1000000 00000000 00000000 00001011 1000000 00000000 00000000 00001100を求める结果-12結果は1————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————結果はマイナス10,000,000,000,000,000,1,000,000,000,000,010で結果は-2という場所が混ざりやすいので、何度も考えてみると徐々に理解できるようになります.
符号なし変位
符号付きシフト動作について説明したが、符号なしシフト動作について説明する
符号なしのシフトは右シフトのみで、左シフトなしには「>>>」を使用してシフトし、いずれも0を補充します.
例えば、public static void main(String[]args){System.out.println(6>>>2);System.out.println(-6>>>2);
}結果:
1 1073741822
分析:
計算機では2桁右シフトしてプラス0にする方法を示しています.結果は1——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————結果は1073741822————————————————————————————シフト操作で注意すべき問題は、高(低)ビットが0を補うか1を補うか、char,byte,short型の操作:(1)<<:(left-shift)、最低ビットが0を補うか(2)>:(signed right-shift)、右シフト過程でシンボルビット拡張(sign extension)、すなわち、符号が1であれば上位補完1、0であれば補完0、すなわち論理右シフト(3)>>>>:(unsigned right-shit)、右シフトプロセスはゼロ拡張(zero extension)、すなわち最上位一律補完0を使用する.すなわち、算術右シフト(4)シフト操作のデータ型はbyte,char,short,int,long型であってもよいが、byte,char,shortを操作する際にはまずint型になり、最後にint型の結果が得られ、long型を操作する際にlong型の結果が得られ、boolean型を操作できない.(5)シフトオペレータは、<<=、>>=、>>>==と、=と組み合わせることができる.例えばa>>=2である.aを2桁右にシフトした値をaに再付与することを示す.この3つのオペレータを用いてbyte,char,short型データを操作する際には注意が必要である
サードパーティの転載
http://blog.csdn.net/dandanteng/article/details/7433531