2012-10-08 5 views
4

자바 코드에서 이것을 보아왔다.자바 서명 된 오른쪽 시프트

int n = 300 //passed through a function 
size = (n + 31) >> 5 //size = 10 

5의 의미는 무엇일까요? INT 크기 (31 비트 + 1 개 기호) (5)의 중요성이 그 (32) = 2^5

감사

답변

6

함께 할 수있는 31 //해야 뭔가의 의미는 무엇인가.

size = (n + 31) >> 5 

세트 n 비트 플래그를 저장하기 위해 필요한 32 비트 정수의 개수 ceiling(n/32)size.

31을 n으로 추가하는 것은 배수가 최소한 n 이상의 32의 최소 배수만큼 커야한다는 것입니다.

+1

@TheZ 그건 그다지 관련이 없습니다. 이해를 돕기 위해 "n/32의 천장을 얻는다"는 의미 인'(n + 31)/32'로 다시 쓰면 - 모든 숫자에 대해 잘 작동합니다. 즉'(n + x - 1)/x'는 일반적인 것입니다 해결책. 분단 대신 시프트하는 것도 여기에 혼합되어 있지만 별도의 주제이기 때문에 여기에서 대부분의 사람들이 이미 알고 있다고 생각합니다. – Voo

+0

이 (n + 31)/32보다 더 효율적일 수 없다고 가정하고 있습니까? –

+0

@CoryKendall 컴파일러가 위태로울 수 있습니다. 그러나 필요한 배열의 크기를 알아내는 것은 일반적으로 일회성 계산이기 때문에이를 수행 할 실제 이유는 없습니다. –

관련 문제