Coding/CPP 삽질기2007. 4. 24. 00:49

#include <stdio.h>


void process(void);

void showBit(int n);



int main (int argc, char **argv) {

    process();

    return 0;

}


void process(void) {

    int          nSignNumber   = 0xFFFFFFFF;

    unsigned int nUnSignNumber = 0xFFFFFFFF;

    

    printf ("Original :\n%d %u\n", nSignNumber, nUnSignNumber);

    showBit(nSignNumber);

    showBit(nUnSignNumber);

    

    nSignNumber   <<= 1;

    nUnSignNumber <<= 1;

   

    printf ("<< 1 :\n%d %u\n", nSignNumber, nUnSignNumber); 

    printf ("%d %u\n", nSignNumber, nUnSignNumber);

    showBit(nSignNumber);

    showBit(nUnSignNumber);


    nSignNumber   >>= 1;

    nUnSignNumber >>= 1;

    

    printf (">> 1 :\n%d %u\n", nSignNumber, nUnSignNumber); 

    printf ("%d %u\n", nSignNumber, nUnSignNumber);

    showBit(nSignNumber);

    showBit(nUnSignNumber);    

}


void showBit(int n) {

    for (int i = 31; i >= 0; i--) {

        printf ("%d%s", ((n & 1<<i)?1:0), ((i % 4 == 0)?" ":""));

    } 

    printf ("\n");

}



int에 >> 연산자를 적용할 경우, 제일 왼쪽 비트가 그대로 복사 됨

unsigned int인 경우 0으로 채워짐 



Hi-iMac:CPP chobocho$ ./a.out

Original :

-1 4294967295

1111 1111 1111 1111 1111 1111 1111 1111

1111 1111 1111 1111 1111 1111 1111 1111

<< 1 :

-2 4294967294

-2 4294967294

1111 1111 1111 1111 1111 1111 1111 1110

1111 1111 1111 1111 1111 1111 1111 1110

>> 1 :

-1 2147483647

-1 2147483647

1111 1111 1111 1111 1111 1111 1111 1111

0111 1111 1111 1111 1111 1111 1111 1111


'Coding > CPP 삽질기' 카테고리의 다른 글

심심풀이 프로그래밍...2  (0) 2007.09.17
별 그려주는 코드  (0) 2006.08.22
입력 버퍼비우기  (0) 2006.02.23
Posted by chobocho