2011-08-23 2 views
1

비트 이진수 (C 언어로)의 왼쪽으로 순환 시프 팅을 구현하는 알고리즘을 찾고 있습니다. 알고리즘은 >>처럼 작동합니다. 오른쪽 슬롯에는 0이 아닌 왼쪽에서 숫자가 채워집니다.순환 쉬프트 C

오른쪽으로 이동하는 경우.

+6

여기서 질문은 무엇입니까? 너 뭐 벌써 해봤 니? Stack Overflow는 프로그래밍과 관련된 특정 문제를 논의하기위한 웹 사이트입니다. 그것은 '무료 코드 서비스'가 아닙니다. 그것이 당신이 찾고있는 것이라면, 다른 곳을보십시오. –

+0

[단어의 비트를 회전하는 방법] 가능한 복제본 (http://stackoverflow.com/questions/4207546/how-to-rotate-the-bits-in-a-word) – zneak

+0

가능한 중복 http :// /tackoverflow.com/questions/2943265/circular-shift-c –

답변

3

여기에서 생각한 것은 상위 n 비트 (n 비트 시프트 용)와 or을 시프트 된 번호의 오른쪽으로 가져 오는 것입니다.

시작해야합니다.

+0

이것이 사실이지만, 맨 위의 n 비트와 오른쪽 비트는 어떻게 처리합니까? –

+0

@Rudy : 오른쪽 시프트 사용 –

+0

예, 분명합니다. 그것은 여전히 ​​사람들에게 비트를 가면 어떻게 옮겨야하는지 등을 말하지 않습니다. –

1
#define NUM_BITS_IN_INT ((sizeof(int) * 8) 

int rotleft(int num, int shift) 
{ 
    return (num << shift) | (num >> (NUM_BITS_IN_INT - shift)); 
} 

int rotright(int num, int shift) 
{ 
    return (num >> shift) | (num << (NUM_BITS_IN_INT - shift); 
} 
+0

왜'return (n << 1) | (n <0);' – Stan

+0

@ Stan : 가능합니다. 그러나 유익한 것은 아닙니다. 그리고 나는 항상 나의 예약이 평범한 정수로서 부울 값을 다루도록한다. 그래도 내 답변을 편집했습니다. –

+0

답장을 보내 주셔서 감사합니다. 음수에 문제가있을 수 있습니다. – Yoyo