RADIX 정렬 C ++ 마스킹 비트가 아닙니다
-
09-12-2019 - |
문제
큐와 큐 배열이 있습니다.buckets
는 배열이며 collector
가 대기열입니다.pass
는 패스를 저장하는 정수입니다.peek()
라는 대기열의 첫 번째 셀을 포함하는 메서드를 나에게 복귀시키는 메소드가 있습니다.shiftOne()
는 한 대기열의 머리를 다른 대기열의 머리를 다른 대기열로 이동시키는 방법입니다.
이제이 코드가 나에게 작동하지 않습니다
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
.
나는 단계별로 갔고 비트를 제대로 마스킹하지 않고 밝혀졌습니다.나는 그들을 바꿀 수 있지만 그것이 그것에 관한 것입니다.그래서 10 개의 요소 배열에 대해 요소 102에 액세스하려고합니다.내가 도대체 뭘 잘못하고있는 겁니까?전원 및 모듈러스를 사용하여 정렬 할 수 있기 때문에 peek()
및 shiftOne()
를 알고 있습니다.
해결책
You're confusing radix-10 with radix-2.
Bit shifting is division by 2, so for example: 102 >> 1
= 102 / 2
= 51.
Similarly: 102 >> 8
= 102 / 2^8
= 102 / 256
= 0 (in int
terms).
The code (i >> 8) & 0xFF
for example is used to extract the content of the second byte of the given i
value.
For your case - stick with divisions by 10 with modulus.
제휴하지 않습니다 StackOverflow