2010-11-29 165 views
2

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

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

输出:
12c95165393

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

回答

4

尝试Long.numberOfLeadingZeros():

long time = System.currentTimeMillis(); System.out.println(Long.numberOfLeadingZeros(time));

对于使用位: Long.SIZE - Long.numberOfLeadingZeros(time)

+0

+1。 – 2010-11-29 09:08:47

0

您的示例中只有11位十六进制数字,因为toHexString不输出前导零。如果你想知道有多少领先位的都没有设置,你可以单独检查位

System.out.println(String.format("%016x", time)); 

,或者你可以右移数(与>>>

0

您可以使用String.format填充格式化,而不是>>),直到它为零。

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 
0

使用的比特数总是64位设置的数目可以是0到64(你应该承担它可以是任何东西)。最高位可以确定,但不太可能有用。总之,你不需要知道。

如果你想打印一个固定宽度的数字或十六进制的相当随机的数字,这是一个打印/格式问题,你可以用printf来确定。

0

根据Java documentation,一个长的类型变量总是64位长。 如果你的意思是算多少位有最低显著位到第一个最显著位为1时之间,那么你可以计算:整整提供合适的工具

int usedBits(long time) 
{ 
    if(time != 0) 
     return (int)(Math.log(time)/Math.log(2)) + 1; 
    else 
     return 0; 
}