Java位运算 - (num >>= 1)是什么意思?

10

我看了一些输出带有前导0的二进制形式数字的代码。

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

我不理解i >>= 1的含义。我知道i >> 1向右移动一位,但不理解=的作用。据我所知,无法搜索" >>=" 来了解其含义。


一个轻微的改进是while((i >>>= 1) != 0),因为当前循环如果给出i = 1 << 31将不会执行任何操作,同时你永远无法打印出32位数的最高位。 - Peter Lawrey
1个回答

22

i >>= 1i = i >> 1 的简写形式,就像 i += 4i = i + 4 的简写一样。

编辑:具体来说,这两个都是复合赋值运算符的示例。


1
而且,具体来说,这是一个符号扩展移位。 - Lawrence Dol
5
数学上将一个数字向右移动1位,等价于将该数字除以2。 - yasouser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接