簡體   English   中英

long中使用的位數-Java

[英]Number of bits used in long - java

我想知道Java中long數據類型中實際使用的位數。 例如:

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

輸出:
12c95165393

在這里您可以看到它只有11個十六進制數字,這意味着僅使用了64位中的44位。 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方法回答此問題。

根據Java文檔類型變量始終為64位長。 如果要計算設置為1的最低有效位與最高最高有效位之間有多少位,則可以計算:

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

您的示例中只有11個十六進制數字,因為toHexString不會輸出前導零。

您可以使用String.format使用填充來格式化它:

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

如果您想知道有多少位前導位未設置,則可以單獨檢查這些位,也可以右移數字(使用>>>而不是>> ),直到該數字為零為止。

碼:

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來確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM