我想知道Java中long數據類型真正使用的位數。 例如:long中使用的位數--java
long time = System.currentTimeMillis();
System.out.println(java.lang.Long.toHexString(time));
輸出:
12c95165393
在這裏可以看到它只有11個十六進制數字,這意味着只有44位出64被使用。 10位仍未被利用。有沒有辦法在運行時知道使用了多少位或填充剩餘位?
我想知道Java中long數據類型真正使用的位數。 例如:long中使用的位數--java
long time = System.currentTimeMillis();
System.out.println(java.lang.Long.toHexString(time));
輸出:
12c95165393
在這裏可以看到它只有11個十六進制數字,這意味着只有44位出64被使用。 10位仍未被利用。有沒有辦法在運行時知道使用了多少位或填充剩餘位?
嘗試Long.numberOfLeadingZeros():
long time = System.currentTimeMillis();
System.out.println(Long.numberOfLeadingZeros(time));
對於使用位: Long.SIZE - Long.numberOfLeadingZeros(time)
根據'toHexString'的API,前導零被剝離。 http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Long.html#toHexString(long)
因此,您無法使用toHexString方法回答此問題。
您的示例中只有11位十六進制數字,因爲toHexString不輸出前導零。如果你想知道有多少領先位的都沒有設置,你可以單獨檢查位
System.out.println(String.format("%016x", time));
,或者你可以右移數(與>>>
:
您可以使用String.format
填充格式化,而不是>>
),直到它爲零。
代碼:
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
使用的比特數總是64位設置的數目可以是0到64(你應該承擔它可以是任何東西)。最高位可以確定,但不太可能有用。總之,你不需要知道。
如果你想打印一個固定寬度的數字或十六進制的相當隨機的數字,這是一個打印/格式問題,你可以用printf來確定。
根據Java documentation,一個長的類型變量總是64位長。 如果你的意思是算多少位有最低顯著位到第一個最顯著位爲1時之間,那麼你可以計算:整整提供合適的工具
int usedBits(long time)
{
if(time != 0)
return (int)(Math.log(time)/Math.log(2)) + 1;
else
return 0;
}
+1。 – 2010-11-29 09:08:47