在Java中将long转换为二进制会得到31位?

在Java中将long转换为二进制会得到31位?,java,Java,我知道Unix时间应该是32位(4字节)的值。要计算当前UNIX时间,我使用以下公式: long time = (System.currentTimeMillis())/1000; 这工作正常-我得到的值与在Unix命令shell上执行此操作时的值相同: “日期+%s” 不过,我想用二进制表示它。所以我试了一下: System.out.println(Long.toBinaryString(time)); 然而,我只得到31位,而不是我预期的32位。我错过了什么 谢谢 Tim前导零不显示。试

我知道Unix时间应该是32位(4字节)的值。要计算当前UNIX时间,我使用以下公式:

long time = (System.currentTimeMillis())/1000;
这工作正常-我得到的值与在Unix命令shell上执行此操作时的值相同: “日期+%s”

不过,我想用二进制表示它。所以我试了一下:

System.out.println(Long.toBinaryString(time));
然而,我只得到31位,而不是我预期的32位。我错过了什么

谢谢


Tim

前导零不显示。试试这个:

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

或:

您应该看到所有64位。(Java中的long是64位,而不是32位)

我希望这有帮助

编辑:

如果您只需要一个包含所有前导零的32位字符串表示,您可以执行以下任一操作。一是:

int i = 42;
String result = String.format("%32s", Integer.toBinaryString(i)).replace(' ', '0');
System.out.println(result);
另一个是:

int i = 42;
String result = String.format("%032d", Integer.parseInt(Integer.toBinaryString(i)));
System.out.println(result);

有符号32位int=31位实际可用数字,1位表示符号?此方法跳过前导零。Long.toBinaryString(0)给出一个简单的“0”。这就是二进制串的工作原理。@MarcB:在Java中,
long
是一个有符号的64位整数。Oracle遇到了困难,不得不实施一个紧缩计划,所以你没有额外的位。谢谢你提醒我long是一个64位的值。我真的想把这个值存储为32位,所以我尝试了以下方法:int time=(int)((System.currentTimeMillis())/1000);System.out.println(Integer.toBinaryString(time));我仍然得到31比特。关于前导零丢失的问题,我如何使用我的“时间”变量来查看它们?你的例子是负数。请看我上面添加的例子。太棒了,谢谢。第二个示例抛出了NumberFormatException,但第一个非常有效。我很惊讶这个示例为您抛出了NumberFormatException。我刚才把这些例子从浏览器中直接复制粘贴到编辑器中,然后运行它们,它们都正常工作了。无论如何,我很高兴你有一个适合你的解决方案。
int i = 42;
String result = String.format("%32s", Integer.toBinaryString(i)).replace(' ', '0');
System.out.println(result);
int i = 42;
String result = String.format("%032d", Integer.parseInt(Integer.toBinaryString(i)));
System.out.println(result);