如何打印负整数的所有设置位

How to print all set bits of a negative integer

 while (n != 0) {
      System.out.print(n & 1);
      n  = n >> 1;
 }

如果 n = -1,Java 中的上述代码会导致无限循环。

如何让它打印负整数?

>>运算符是一个"sign-extended"右移运算符,也就是说,如果设置了原始值中的最高位,则"shifted in"的位为1。这基本上使结果的符号保持不变。

你想要 >>> 运算符( 无符号右移 运算符),它总是 "shifts in" 0 位,即使最高位是 1。

有关详细信息,请参阅 JLS section 15.19 or the Java tutorial