2011-04-08 45 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