2017-10-19 13 views
0

오른쪽에 부호없는 시프트를 적용하려하지만이를 수행 할 방법을 찾을 수 없습니다. 알고있는 사람이 있습니까?BigInteger에서 Java 서명되지 않은 비트 시프트

샘플 코드 :

BigInteger bi; 

bi.shiftRight(7) // equals >> 7 

어떻게 >>> 7을 적용?

중복? 제발, 제 대답이 없습니다. BigInteger javadocs로서

+1

https://stackoverflow.com/questions/2727005/bitshifting-with-bigintegers-in-java –

+0

이러한 연산자는 BigInteger에 적합하지 않습니다. 그러한 연산자를 사용하고자하는 것을 추가하기 위해 질문을 확장 할 수 있습니까? 여러 입력 유형에 대한 예상 결과의 몇 가지 예를 제공 할 수 있습니까? – DodgyCodeException

+0

@ DodgyCodeException : 나는 그렇게 생각했지만, 왜 그렇게 생각하지 않습니까? 양수는 정상적으로 이동 될 수 있지만 음수는 양수가되고 부정되어야합니다. IOW, 오른쪽으로 4 씩 이동하면 0x87654321 (음수)은 0x08765432 (양수)가됩니다. 그것은 BigIntegers에 대해서도 에뮬레이션 될 수 있습니다. –

답변

2

말한다이 동작은이 클래스에 의해 제공되는 "무한 워드 크기"추상화와 함께 거의 의미로

부호없는 오른쪽 시프트 연산자 (>>>)가 생략된다.

+0

대체 할 수 있습니까? – Romeortec

0

당신이 사용하고자하는대로 연산자를 사용할 수 있도록하기 위해 unsigned int int 유형을 사용하는 것이 좋습니다. 데이터는 서명되지 않은 것입니다.

+0

unsigned (java가없는 것처럼)와 비슷한 데이터 유형을 만드는 것은 링크입니다 .https : //stackoverflow.com/questions/4449100/unsigned-int-in-java/4449161#4449161 –

1

부정적 일 경우 항상 부정 할 수 있습니다.

private void test(String[] args) { 
    test(BigInteger.ONE.shiftLeft(10)); 
    test(BigInteger.valueOf(-50)); 
} 

private void test(BigInteger bigInteger) { 
    test1(bigInteger); 
    test1(bigInteger.negate()); 
} 

private void test1(BigInteger bi) { 
    System.out.println(bi.toString(2)+" >> 5 = "+bi.shiftRight(5).toString(2)); 
} 

NB가 : BigInteger 당신이 그들에 수학을 할 경우 수학이 값을 수정하지 않기 때문에 그래서 당신은 반환 된 결과를 유지해야 불변 것을 기억, 그것은 계산 된 결과를 반환합니다.