我想知道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