본문 바로가기

Native/C

Circular shift complete ver

/**********************************************************************
*
*        2005-04-12
*        Circular shift (left or right)
*        Left 시 + Right시 -
*
***********************************************************************/

#include <stdio.h>

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

    scanf("%d%d",&num,&n);
    printf("%d를 %d만큼 이동 ", num, n);
    printf("\n");
    // 앞으로비교 unsigned int x를참조
    len = sizeof(int)*8;
    
    for(i=len-1;i>=0;i--)
        printf("%d",num>>i & 1);

    printf("\n");

    if(n>0)
    {
        while(i<len)
        {
            if(i>=n-1) break;

            if(num & x)
            {
                num <<= 1;
                num |= y;
            }
            else
                num <<= 1;
            ++i;
        }
    }
    else
    {
        n *= -1;    // +로 변경
        while(i<len)
        {
            if(i>=n-1) 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;*/

                // and 방식
                num &= 0x7fffffff;
            }
            else num >>= 1;
            ++i;
        }
    }


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

    printf("\n");
}

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

StrMove (문자열에서 특정이후 문자를 수만큼 이동)  (0) 2013.10.02
float to str  (0) 2013.10.02
reverse  (0) 2013.10.02
104  (0) 2013.10.02
Circular shift (right)  (0) 2013.10.02