2011-04-08 170 views
6

我正在看一些代碼,輸出一個數字到二進制形式的前置0。Java位操作 - (num >> = 1)做什麼?

byte number = 48; 
    int i = 256; //max number * 2 
    while((i >>= 1) > 0) { 
     System.out.print(((number & i) != 0 ? "1" : "0")); 
    } 

並且不理解i >> = 1是什麼。我知道我>> 1向右移動了1位,但不明白「=」和AFAIK的作用,因此無法搜索「>> =」來查明它的含義。

+0

稍微改進是'while((i >>> = 1)!= 0)',因爲如果你給它''= 1 << 31',當前循環不會做任何事情,並且你永遠不會打印出最高位的一個32位數字。 – 2011-04-08 07:42:10

回答

11

i >>= 1只是shorhand爲i = i >> 1中相同的方式,i += 4是短期的i = i + 4

編輯:具體地講,這些都是的compound assignment operators這兩個例子。

+1

而且,具體而言,這是一個符號擴展的轉變。 – 2011-04-08 03:45:12

+0

數學上將數字右移一位相當於將數字除以二。 – yasouser 2011-04-13 19:26:40