2010-11-29 12 views
2

Javaでlongデータ型で実際に使用されているビット数を知りたい。例えば :long - javaで使用されるビット数

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

出力:ここ
12c95165393

あなたはそれが唯一の64のうち唯一の44ビットが利用されることを意味する11進数字を持って見ることができます。 10ビットは未だ利用されていない。実行時にいくつのビットが使用されているか、残りのビットを埋め込むかを知る方法はありますか?

答えて

4

試行のLong.numberOfLeadingZeros():使用ビットについて

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

Long.SIZE - Long.numberOfLeadingZeros(time)
+0

+1を正確に適切なツールを提供します。 –

0

toHexStringは先行ゼロを出力しないため、例ではわずか11桁の16進数しかありません。

0

あなたはString.formatを使用してパディングでそれをフォーマットすることができます。

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

あなたが解除されているどのように多くの先行ビットのかを知りたい場合は、個別のビットをチェックするか、またはあなたが正しい>>>で(番号をシフトすることができます、0でない限り>>ではありません)。

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

使用されるビットの数は、設定されたビットの数は、0と64(あなたはそれが何かすることができ想定する必要があり)することができ、常に64です。最上位ビットセットは決定することができるが、有用性は非常に低い。要するに、あなたは知る必要はありません。

数字の固定幅または16進数でかなり乱数を印刷する場合は、印刷/書式の問題です。これはprintfで判断できます。

0

Java documentationによれば、長い型の変数は常に64ビット長です。 あなたは1に設定された第1の最上位ビットに最下位ビットの間であるどのように多くのビットをカウントすることを意味するならば、あなたは計算することができます。

int usedBits(long time) 
{ 
    if(time != 0) 
     return (int)(Math.log(time)/Math.log(2)) + 1; 
    else 
     return 0; 
} 
関連する問題