javaの移動位置演算について説明します。>>


1.概念
<<左シフト演算子、左シフトは後で0を補って、num<<1、numに2を乗じることに相当します。
>>右移動演算子、右移動は前で1または0、num>>1を補って、numで2で割るのに相当します。
>>>符号なしで右に移動すると、前で0を補って、符号ビットを無視して、空席は全部0で補完されます。
また、左右でも右でも32桁移動するのは、移動しないのと同じです。
実際にjava仮想マシンでこのコードを実行するときは、以下のように実行されます。
5>(n%32)-->結果
ここにいますしたがって、5>>32は5>(32%>>>5>>0の結果である。
 2.テストコード

public class Test{
 public Test(){
 System.out.println("=============     >> ===========");
 int i=0xC0000000;
 System.out.println("   :i= "+i+" = "+Integer.toBinaryString(i)+"(B)");
 i=i>>28;
 System.out.println("   :i= "+i+" = "+Integer.toBinaryString(i)+"(B)");
 
 System.out.println("---------------------------------");
 
 int j=0x0C000000;
 System.out.println("   :j= "+j+" = "+Integer.toBinaryString(j)+"(B)");
 j=j>>24;
 System.out.println("   :j= "+j+" = "+Integer.toBinaryString(j)+"(B)");
 
 System.out.println("
"); System.out.println("============== >>> ============="); int m=0xC0000000; System.out.println(" :m= "+m+" = "+Integer.toBinaryString(m)+"(B)"); m=m >>> 28; System.out.println(" :m= "+m+" = "+Integer.toBinaryString(m)+"(B)"); System.out.println("---------------------------------"); int n=0x0C000000; System.out.println(" :n= "+n+" = "+Integer.toBinaryString(n)+"(B)"); n=n>>24; System.out.println(" :n= "+n+" = "+Integer.toBinaryString(n)+"(B)"); System.out.println("
"); System.out.println("============== ==============="); int a=0xCC000000; System.out.println(" :a= "+a+" = "+Integer.toBinaryString(a)+"(B)"); System.out.println(" 32:a="+(a>>32)+" = "+Integer.toBinaryString(a>>32)+"(B)"); System.out.println(" 32:a="+(a>>>32)+" = "+Integer.toBinaryString(a>>>32)+"(B)"); System.out.println(" 64:a="+(a>>64)+" = "+Integer.toBinaryString(a>>64)+"(B)"); System.out.println(" 64:a="+(a>>>64)+" = "+Integer.toBinaryString(a>>>64)+"(B)"); } public static void main(String[] args){ new Test(); } }
実行結果:
===========算術の右へ>===============================================================
シフト前:i=-1073741824=1100000 000000 000 000(B)
シフト後:i=-4=111111111111111111111111111111111111111111111000(B)
シフト前:j=20326592=1100000 00000(B)
シフト後:j=12=1100(B)
=========論理の右に>==========================================
シフト前:m=-1073741824=1100000 000000 000 000(B)
シフト後:m=12=1100(B)
シフト前:n=20326592=1100000 000000(B)
シフト後:n=12=1100(B)
==========シフトシンボルの取モード======================================================================
シフト前:a=-872415232=110011000000 0000 000(B)
算術の右シフト32:a=-87241523=110011000000 0000 0000 000(B)
論理右シフト32:a=-87241522=110011000000 0000 0000(B)
算術の右のシフト64:a=-87241523=110011000000 0000 000(B)
論理は64を右に移動します。a=-872415232=110011000000 0000 000(B)
3.なぜ符号なしで左に移動しないですか?
この問題はみんなで考えてもいいです。考えられるはずです。ヒント:ないということは存在しないということです。
以上述べたのは小编が绍介したjavaの中の移动位演算です。ここでも私たちのサイトを応援してくれてありがとうございます。