long中使用的位数 - java

时间:2010-11-29 00:49:20

标签: java bit-manipulation

我想知道Java中long数据类型中真正使​​用的位数。 例如:

long time = System.currentTimeMillis();
System.out.println(java.lang.Long.toHexString(time));

输出:
    12c95165393

在这里你可以看到它只有11个十六进制数字,这意味着64个中只有44位被使用。 10位仍未使用。有没有办法在运行时知道使用了多少位或填充剩余的位?

7 个答案:

答案 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确定这一点。