2010-11-29 2 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은 선행 0을 출력하지 않으므로 예제에는 11 진수 숫자 만 있습니다. 당신이 최고의 비트의 대부분은 개별적으로 비트를 확인할 수 있습니다 해제됩니다 방법을 알고 싶다면

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

을하거나 바로 >>>으로 (수를 전환 할 수 있습니다 :

0

당신은 패딩 String.format를 사용하여 포맷 할 수 있습니다 , 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 최초의 최상위 비트 세트에 최하위 비트 사이에 얼마나 많은 비트 계산을 의미하는 경우 는 당신은 계산할 수 있습니다 : 딱 맞는 도구를 제공

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