2010-11-29 163 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; 
}