#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 |