6

我正在尝试以二进制形式打印 Long ,但它一直在切断0's. 有没有办法强制它显示所有位?

这是我的代码:

long l = 1;
System.out.println(Long.toBinaryString((long)l));

1由于删除0'si 希望保持:

0000 0000 0000 0000 0000 0000 0000 0001

提前致谢。

我临时讨厌的解决方案:

public String fillZeros(Long value) 
{
    String str = Long.toBinaryString((long) value);
    String temp;
    temp = str;
    while(temp.length() < 32) {
        temp = "0" + temp;
    }
    return temp;
}
4

3 回答 3

9

你可以这样做

for(int i = 0; i < Long.numberOfLeadingZeros((long)l); i++) {
      System.out.print('0');
}
System.out.println(Long.toBinaryString((long)l));

这将得到你想要的,除了每 4 个数字之间没有空格(你应该能够编码)。可能有一种方法可以使用Formatter自动执行此操作, 但我找不到它。

编辑:

如果你知道你需要的 0 的数量,你可以使用String's格式方法(我忘了把它改回一个数字,这将修复异常)。

String.format("%032d", new BigInteger(Long.toBinaryString((long)l)));
于 2012-05-01T17:11:46.323 回答
0

如果你愿意引入 Apache Commons StringUtil,你可以这样做:

    long l = 1;
    System.out.println( StringUtils.leftPad( Long.toBinaryString( l ), 64, "0" ) );
于 2012-05-01T17:27:04.403 回答
-1
long value=4;
String mask = "00000000000000000000000000000000";
String str = Long.toBinaryString((long) value);
System.out.println(mask.substring(0, mask.length()-str.length())+str);

For a value of 4 the result will be 00000000000000000000000000000100
于 2018-03-23T17:42:59.393 回答