2011-09-28 3 views
0

결과의 값은 음수 여야하지만 양수 여야합니다.Java에서 길이가 길어질 큰 16 진수 값이 0보다 작 으면

어떻게 해결할 수 있습니까?

감사합니다.

BigInteger b = new BigInteger ("80000000000000004308000000000000", 16);

System.out.println ("long value :"+ b.longValue());

-> 긴 값 : 4830110600354856960

+1

이해가 안됩니다. 왜 그것이 부정적이어야합니까? – Nican

+0

@ 니카노 그의 수는 실제로 4로 시작하고 길게 들어 맞습니다. 나는 처음에 8이 2의 보수를 사용하여 기호를 나타내는 시도라고 생각합니다. –

+0

@JeffFerland 숫자가 음수라고 가정하면 BigNumber 생성자가 지정됩니다. 선택적 "-"기호를 앞에 붙여야합니다. – Nican

답변

0

당신은 항상 128 비트 번호가 가장 높은 비트가 다음 다음 줄을 사용할 수있는 기호입니다 가정하면 :

BigInteger neg = BigInteger.ONE.shiftLeft(127); 
BigInteger b = new BigInteger("80000000000000004308000000000000", 16); 
if(b.compareTo(neg) >= 0) { 
    b = neg.subtract(b); 
} 

참고 : 비트의 수가에 맞는 경우 b.longValue()에만 적합 할 것 이러한 많은 수의 경우에는 그렇지 않을 수도 있습니다.

1

문자열 표현은 부호가있는 long이지만 서명되지 않은 문자열로 표시됩니다 (기호는 문자열 시작 부분에 "-"를 사용하여 표시됩니다).

The String representation consists of an optional minus sign followed by a sequence of one or more digits in the specified radix.

비트는 이동 또는 문자열이 문자열 인스턴스에서이 일을하는 데 필요한 수정.

가장 좋은 대답은 문자열을 바이트 배열로 변환하고 2의 보수에 따라 음수 또는 양수를 인식하는 BigInteger(byte[] val) 인스턴스화를 사용하는 것이라고 생각합니다. 해당 문자열에서 바이트 배열로 변환하는 경우 Many options이 존재합니다. 골라보세요.

... 오, 너의 숫자가 너무 길어서 길게 갈 수 없으니, 역시 문제가 될 것이다. 당신은 최하위 비트를 얻습니다.