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

时间:2014-06-27 16:31:39

标签: java

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

long time = (System.currentTimeMillis())/1000;

这很好用 - 我得到的值与在Unix命令shell上执行时相同: "日期+%s"。

我想用二进制表示这个。所以我尝试了这个:

System.out.println(Long.toBinaryString(time));

然而,我只得到了31位,而不是我预期的32位。我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

或者:

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

或者:

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

你应该看到所有64位。 (Java中的长度是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);