2011-12-04 3 views
-2

Java에서 주어진 정수를 나타내는 데 필요한 바이트 수를 제공하는 함수가 필요합니다. 나는 2를 통과하면 그것은 반환해야합니다 (1), (400) -> 2, 822,222 -> 3 등주어진 정수를 나타내는 데 필요한 바이트 수를 어떻게 결정합니까?

@Edit : 지금이 함께 붙어있어 경우 :

numOfBytes = Integer.highestOneBit(integer)/8 

정확히 무엇을 알고하지 마십시오 highestOneBit()도 시도했지만 다음과 같이 시도했습니다.

numOfBytes = (int) (Math.floor(Math.log(integer)) + 1); 

일부 웹 사이트에서 발견 된 것입니다.

+2

같습니다. 그래서 당신이 요구하는 것은 말이되지 않습니다. –

+1

@AmirRaminfar 아마도 숫자를 나타내는 데 필요한 최소 바이트 수를 요구할 것입니다 (맨 앞의 0 제거). – Jeffrey

+0

@ 제프리 예, 있습니다. – wassup

답변

1
static int byteSize(long x) { 
    if (x < 0) throw new IllegalArgumentException(); 
    int s = 1; 
    while (s < 8 && x >= (1L << (s * 8))) s++; 
    return s; 
} 
0

정상적인 십진수를 사용하여 같은 문제를 해결하는 방법을 생각하십시오. 그런 다음 이진/바이트 표현에 동일한 원칙을 적용합니다. 즉, 십진수로 10을 사용할 256을 사용합니다.

0
static int byteSize(long number, int bitsPerByte) { 
    int maxNumberSaveByBitsPerByte = // get max number can be saved by bits in value bitsPerByte 
    int returnValue = getFloor(number/maxNumberSaveByBitsPerByte); // use Math lib 
    if(number % maxNumberSaveByBitsPerByte != 0) 
      returnValue++; 
    return returnValue; 
} 
3

Integer.highestOneBit(arg)은 원래 위치에서 최상위 비트 세트 만 반환합니다.

numOfBytes = (Integer.numberOfTrailingZeroes(Integer.highestOneBit(integer)) + 8)/8; 

+ 8 적절한 라운딩에 대한 설명입니다 : 예를 들어, Integer.highestOneBit(12)하지 3. 그래서 당신은 아마 여기에 3을 반환 Integer API

일부 샘플 코드는 않는, Integer.numberOfTrailingZeros(Integer.highestOneBit(12))를 사용하려면, 8입니다.

0

양수 값 : 0과 1은 1 자리가 필요하고 2 자리수는 최대 두 배가되고 모든 숫자는 2 배가됩니다.

public static int binaryLength (long l) { 
    if (l < 2) return 1; 
    else 1 + binaryLength (l /2L); 
} 

하지만 이동도 작동합니다 : 그래서 재귀 솔루션을 분할하는 것입니다

public static int binaryLength (long l) { 
    if (l < 2) return 1; 
    else 1 + binaryLength (l >> 1); 
} 

음의 값은 선도적 인 일이,이 질문에 대한 많은 이해가되지 않도록. binary1이 decimal1이라고 가정하면 binary1은 -1이 될 수 없습니다. 그러나 그것은 무엇일까요? b11? 즉,이 같은 간단한 일을하지 않을 이유 3.

0

은 다음과 같습니다

private static int byteSize(int val) { 
    int size = 0; 
    while (val > 0) { 
     val = val >> 8; 
     size++; 
    } 
    return size; 
} 
0
int numOfBytes = (Integer.SIZE >> 3) - (Integer.numberOfLeadingZeros(n) >> 3); 

이 구현은, 잠시 성능 친화적 인만큼 컴팩트는 부동 소수점 연산을 포함하지 않기 때문에도 어떤 루프.

int numOfBytes = Math.ceil((Integer.SIZE - Integer.numberOfLeadingZeros(n))/Byte.SIZE); 

최적화 된 형태의 매직 넘버 3는 가정에서 온다 :

는 그것은 양식에서 파생 Byte.SIZE 모두의 int는 32 비트 메모리 공간으로 표시됩니다 8

관련 문제