2012-07-17 67 views
3

我正在理解>>>的工作原理。要做到這一點我有這樣的程序:>>>操作員如何在Java中工作

public class Main { 
    public static void main(String[] args) 
    { 
     short i = 130; 
     byte b = (byte)i; 
     String a = Integer.toBinaryString(256 + (int) b); 
     System.out.println(Integer.toBinaryString(i)); 
     System.out.println(a.substring(a.length() -8)); 
     System.out.println(b); 

     byte c = (byte) (b >>> 2); 
     String x = Integer.toBinaryString(256 + (int) c); 

     System.out.println(x.substring(x.length() -8)); 
     System.out.println(c); 
    } 
} 

而且我得到這樣的輸出:

10000010 
10000010 
-126 
11100000 
-32 

要顯示二進制,我發現here如何顯示一個字節的二進制字符串。

操作>>>會增加零,但我得到這個:

-126 
11100000 
-63 

相反的:

-126 
10100000 
-32 

它增加了0代替1:

11100000 
10100000 

什麼時我做錯了?也許我什麼都不懂。

+2

@DanielDiPaolo錯誤。此外,我覺得這個問題已經在 – Woot4Moo 2012-07-17 16:36:25

+0

@DanielDiPaolo'>>>'是一個零填充右移。 – Mysticial 2012-07-17 16:36:45

回答

8

的問題是,b >>> 2首先推動b爲int值爲-126,即

11111111 11111111 11111111 10000010 

當你轉移該權利2零擴展,您可以:

00111111 11111111 11111111 11100000 

當它被轉換回一個字節時,它只是甩掉前三個字,給出11100000,這就是你所看到的。

有關位移的更多詳細信息,請參閱JLS的section 15.19

+0

我正要將你從另一篇文章中回答的問題與C#等效的 – Woot4Moo 2012-07-17 16:38:14

+0

謝謝你的回答。你知道是否有另一個代表一個字節作爲二進制字符串?非常感謝。 – VansFannel 2012-07-17 18:30:10

+0

@VansFannel:我不知道一個非正式的,但我可能會使用:'Integer.toBinaryString(b&0xff)'。 – 2012-07-17 18:35:25