代码之家  ›  专栏  ›  技术社区  ›  changhoon seong

为什么这个代码没有按照我想的方式输出?(关于班次)

  •  -1
  • changhoon seong  · 技术社区  · 9 月前
    public static void maain(String[] args){
        int a = -11;
        System.out.println(" a= "+a+"("+Integer.toBinaryString(a)+")");
        System.out.println(" a>>2= "+(a>>2)+"("+Integer.toBinaryString(a>>2)+")");
        System.out.println(" a>>>2= "+(a>>>2)+"("+Integer.toBinaryString(a>>>2)+")");
    }
    

    我认为a>>>2的输出是00111111111111111111111111101,因为>>>表示向右移动并用0填空。我想错了吗?

    1 回复  |  直到 9 月前
        1
  •  1
  •   Thomas Kläger    9 月前

    你为什么这么认为 Integer.toBinaryString() 输出前导零?这个 documentation 另有明确规定:

    如果无符号幅值为零,则用单个零字符“0”(“\u0030”)表示;否则,无符号幅度表示的第一个字符将不是零字符。

    Java没有提供将整数转换为带前导零的二进制表示的内置方法。上提供了几种可能的解决方案 How to get 0-padded binary representation of an integer in java?

    例如,您可以使用:

    System.out.println(" a>>>2= "+(a>>>2)+"("+String.format("%32s", Integer.toBinaryString(a>>>2)).replace(' ', '0')+")");