Java中移位操作運算符的理解


java中的移位運算符有三種:

1、 <<: 左移

2、 >>: 右移

3、 >>>: 無符號右移

使用方法:左移就是將左邊的操作數在內存中的二進制數據左移指定的位數,左邊移空的部分補零,右移:如果最高位是0,空位就填0,如果最高位是1,空位就填1。無符號右移無論最高位是什么,空位都補零。

數據在內存中以補碼的形式存儲

左移和右移的數學意義:

對於左移,對於整型a,  a<<n=a*2^n(前提是結果在整型的范圍之內),對於右移 正的整型a,  a>>n=a/2^n,對於負的整型a,a>>n=-(|a|/2^n+1);

為什么對於右移,正數和負數的結果不一樣呢?

我們可以看一個例子:

 

package sort;

public class sort1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    int a=-123;
    System.out.println("原二進制位:"+Integer.toBinaryString(a));
    int b=a>>2;
    System.out.println("右移兩位結果為:"+b);
    System.out.println("右移后二進制位:"+Integer.toBinaryString(b));
    int c=123;
    System.out.println("原二進制位:"+Integer.toBinaryString(c));
    int d=c>>2;
    System.out.println("右移后的結果為:"+d);
    System.out.println("右移后二進制位:"+Integer.toBinaryString(d));
    }
}

 

 

運行結果為:

 

對於123,其二進制數為0  1111011,右移兩位相當於把0  111000右移兩位,而0  111000的十進制為120,所以結果為120/4=30;

對於-123,其二進制數為1  0000101,右移兩位相當於把1  0000100右移兩位,而1  0000100的十進制為-124,所以結果為-124/4=-31。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM