2016-08-06 3 views
1

C 프로그래밍에서 순환 카운터를 만들고 싶습니다. 첫 번째 변수는 0-3의 값을 저장할 수 있습니다. 두 번째 변수는 사용자의 값 (0-3)을 묻습니다. 세번째 변수는 이동 사용자에게 요청 중 세번째 ​​변수 두면 번째 변수는 왼쪽으로 이동한다 좌순환 카운터를 구현하는 방법은 무엇입니까?

을 오른쪽 : 세번째 변수 적합한

3->2 
2->1 
1->0 
0->3 

마찬가지로 경우 제 2 가변 오른쪽으로 이동해야

0->1 
1->2 
2->3 
3->0 
+4

구현하려는 시도를 게시 할 수 있습니까? – ameyCU

+0

귀하의 시도에 대한 귀하의 어려움을 설명하십시오. – kaylum

+3

카운트 다운 :'x = (x + 1) & 3', 카운트 다운 :'x = (x + 3) & 3' – Rotem

답변

2
#include <stdio.h> 

int main(void) 
{ 
    int max = 3, num, i; 

    num = 0; 
    for (i = 0; i < 10; i++) { 
     printf("%d\n", num); 
     num = (num + 1) % (max + 1); 
    } 
    puts("--"); 
    num = max; 
    for (i = 0; i < 10; i++) { 
     printf("%d\n", num); 
     num = (max - -num) % (max + 1); 
    } 
    return 0; 
} 

출력 :

,536,
0 
1 
2 
3 
0 
1 
2 
3 
0 
1 
-- 
3 
2 
1 
0 
3 
2 
1 
0 
3 
2 
0

2의 거듭 제곱으로 랩핑하면이 방법이 효과적입니다.

#include <stdio.h> 

typedef struct 
{ 
    unsigned int x : 2; /* Holds up to 4 values */ 

} SmallInt; 


int main() 
{ 
    SmallInt up = {0}; 
    SmallInt down = {0}; 

    for (int z = 0; z < 10; z++) 
    { 
     printf("%d %d\n", up.x, down.x); 

     up.x++; 
     down.x--; 
    } 

    return 0; 
} 
+0

이것은 좋은 기술입니다! 비트 필드의 좋은 사용. – HuStmpHrrr

+0

결국 오버플로하지 않겠습니까? x 값을 줄 바꿈 했음에도 불구하고 x가 1 바이트까지 증가하지 않습니까? 아니면 잘못되었습니다. –

+0

@byteventurer 아니요. 실제로 정수는 8 비트에 2 비트가 있으므로 3> 0 및 0-> 3에서 래핑하지 않습니다. – EvilTeach

관련 문제