我想知道Java中long数据类型中真正使用的位数。 例如:
long time = System.currentTimeMillis();
System.out.println(java.lang.Long.toHexString(time));
输出:
12c95165393
在这里你可以看到它只有11个十六进制数字,这意味着64个中只有44位被使用。 10位仍未使用。有没有办法在运行时知道使用了多少位或填充剩余的位?
答案 0 :(得分:5)
尝试Long.numberOfLeadingZeros():
long time = System.currentTimeMillis();
System.out.println(Long.numberOfLeadingZeros(time));
对于二手位:
Long.SIZE - Long.numberOfLeadingZeros(time)
答案 1 :(得分:1)
根据'toHexString'的API,前导零被剥离。 http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Long.html#toHexString(long)
因此,您无法使用toHexString方法回答此问题。
答案 2 :(得分:0)
您的示例中只有11个十六进制数字,因为toHexString不输出前导零。
答案 3 :(得分:0)
您可以使用String.format
System.out.println(String.format("%016x", time));
如果您想知道有多少前导位未设置,您可以单独检查这些位,也可以右移数字(使用>>>
,而不是>>
),直到它为零。< / p>
答案 4 :(得分:0)
<强>代码:强>
String minBin=Long.toBinaryString(Long.MIN_VALUE),maxBin=Long.toBinaryString(Long.MAX_VALUE);
System.out.println("Number of bits in Min Long : "+minBin.length()+", Max Long : "+maxBin.length());
<强>输出:强>
Number of bits in Min Long : 64, Max Long : 63 //1 extra bit in min long to represent sign
答案 5 :(得分:0)
根据Java documentation, long 类型变量总是64位长。 如果您要计算最低有效位与第一个最高有效位设置为1之间的位数,那么您可以计算:
int usedBits( long time )
{
if( time != 0 )
return (int)( Math.log( time ) / Math.log( 2 ) ) + 1;
else
return 0;
}
答案 6 :(得分:-1)
使用的位数始终为64.设置的位数可以是0和64(您应该假设它可以是其他任何东西)。可以确定最高位集,但不太可能有用。简而言之,您不需要知道。
如果要打印具有固定数字宽度或十六进制的相当随机的数字,这是打印/格式化问题,您可以使用printf确定这一点。