일단 나는 좀 왕 초보야. 맨 처음에는 비트연산자를 이용해서 입력받은 숫자를 x칸을 왼쪽으로 회전시키고 그것의 정수값을 가지는 프로그램을 짰어. 그런데 2진수를 같이 표시하는게 좋겠다는 생각이 들어서 2진수를 표시하려고 했는데 2진수를 출력하는 방법을 몰라서 그냥 배열이랑 위에 MAX선언하고 10진수를 2진수 스트링으로 만들어주는 함수를 짜서 배열을 프린트 했어. 그런데 너무 눈에 거슬리는게 만약에 64를 4칸 돌렸다고 하면

1000000
1000

이렇게 나와버려. 넘 거슬려서

1000000
0001000

이렇게 만들고 싶은데 내 부족한 머리로는 나오는 방법이 배열을 하나 더 선언해서 배열을 가지고 노는 방법밖에 없어. 그런데 그랬다가는 비트연산자를 아예 쓸 필요가 없어서 쉬프트연산자를 써서 만들어야 한다는 조건을 어긴다는거야. 또 프로그램이 지저분한 것 같기도 하고.
 %10s 이건 쓰기가  너무 싫어. 그냥 오른쪽에 정렬해주는 효과고 자리수에 구애를 받으니까. 횽들은 뭔가 좋은 방법이 있어?? 그리고 내가 짠것보다 훨씬 간단하게 할 수 있으면 그것도 알려주면 진짜 감사감사.




#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

int conv10to2(int n; char st;);

int main()
{
    int i, n, m;
    int c;          /*helper*/
    char twostr[MAX];

    i = n =0;
    printf(\"숫자를 입력해라.\\n\");
    scanf(\"%d\", &n);
    c = n;
    for(i=0; c>=1;++i)      /* i is number of bits*/
        c = c>>1;
    printf(\"회전시킬 숫자를 입력해라.\\n\");
    scanf(\"%d\", &c);
    printf(\"----------------------------------------------------------\\n\");
    c = c%i;
    conv10to2(twostr, n);
    printf(\"%10d = %20s\\n\", n, twostr);
    for(m=0; m<=MAX-1; ++m)
        twostr[m] = \'\\0\';
    n = (n<<c) - ((n>>(i-c))<<i) + (n>>(i-c));
    conv10to2(twostr, n);
    printf(\"%10d = %20s\\n\", n, twostr);
    printf(\"----------------------------------------------------------\\n\");
    printf(\"결과 = %d\", n);
    return 0;
}

int conv10to2(st, n)
char st[];
int n;
{
    int i, c;
    char helper[MAX];       /*reversed string of the number in the binary type*/

    c = 0;
    for(i=0; i>= MAX -1; ++i)
        helper[i] = \'\\0\';
    for(i=0; n>=1; ++i)
    {
        if(n%2 == 0)
        {
            n /=2;
            helper[i] = \'0\';
        }
        else
        {
            n = (n-1)/2;
            helper[i] = \'1\';
        }
    }
    --i;
    for(c=0; c<=i; ++c)
    {
        st[c] = helper[i-c];
    }
    return 0;
}