본문 바로가기

Native/C

Circular shift (right)

/**********************************************************************
*
*        2005-04-12
*        Circular shift (right)
*
***********************************************************************/

#include <stdio.h>

void main(void)
{
    int num,i=0,len,n;
    unsigned int x = 0x80000000, y = 0x00000001;

    // 0000 0000 0000 0000 0000 0000 0000 0001
    // 1000 0000 0000 0000 0000 0000 0000 0000
    // 0100 0000 0000 0000 0000 0000 0000 0000

    scanf("%d%d",&num,&n);
    printf("%d를 %d만큼 이동 ", num, n);
    printf("\n");

    // 앞으로비교 unsigned int x를참조
    len = sizeof(int)*8;

    while(i<len)
    {
        if(i>=n) break;
        
        if(num & y && !(num & x))            // 0 1
        {
            num >>= 1;
            num |= x;
        }
        else if(num & x && !(num & y))        // 1 0
        {
            num >>= 1;
            num = ~num;
            num |= x;
            num = ~num;
        }
        else num >>= 1;
        ++i;
    }

    len--;
    for(i=len;i>=0;i--)
        printf("%d",num>>i & 1);

    printf("\n");
}

'Native > C' 카테고리의 다른 글

reverse  (0) 2013.10.02
104  (0) 2013.10.02
Circular shift (left)  (0) 2013.10.02
char 를 float로 변경하라  (0) 2013.10.02
소프트웨어 개발 순서  (0) 2013.10.02