C언어 수업정리/3월 수업정리
3월 25일 연산자와 비트연산자/
송시혁
2013. 3. 25. 11:29
연산자 &&
비트연산자&
예) 172&&106 참일때 1.
172&106 참일때 40.
172 = 1 0 1 1 1 1 0 0
106 = 0 1 1 0 1 0 1 0
0 0 1 0 1 0 0 0
한 자리씩 따진다.
a ^b = xor 이건 알고 있으므로 생략
틸트 ~ 1의 보수를 취하는 것.
172 = 1 0 1 0 1 1 0 0
-172 = 0 1 0 1 0 0 1 1
shift 연산자.
172>> 1칸 오른쪽으로 이동
1 0 1 0 1 1 0 0
0 1 0 1 0 1 1 0
1칸씩 오른쪽으로 이동하였다. 그래서 출력은 83이 나온다.
이런식으로 8칸까지 모두 이동해본다.
1칸이동 = 86
2칸이동 = 43
3칸이동 = 21
4칸이동 = 10
5칸이동 = 5
6칸이동 = 2
7칸이동 = 1
8칸 이동 = 0
172를 2로 8번 나눈것이다.
아래는 관련 소스
#include <stdio.h> int main() { int inum1; int inum2; int inum3; int inum4; int inum5; int inum7; unsigned int uinum8;
inum1 = (172&&106); inum2 = (172&106); inum3 = (172^106); inum4 = ( char)(83); inum5 = 172>>1; inum7 = -1; uinum8 = -1;
printf("논리연산자= %d\n", inum1); printf("비트연산자= %d\n", inum2); printf(" xor비트연산자= %d\n", inum3); printf("~연산자= %d\n", inum4); printf("~연산자= %08x\n", inum4); printf("~연산자= %d\n", inum5); printf("<<연산자= %d\n", 172<<1); printf("%08x\n", inum7); // 최대값이 -1 printf("%08x\n", uinum8);
printf("%08x\n", inum7>>1); printf("%08x\n", uinum8>>1); return 0; }
아래 구문을 유의하자.
printf("%08x\n", inum7); // 최대값이 -1 printf("%08x\n", uinum8);
printf("%08x\n", inum7>>1); printf("%08x\n", uinum8>>1);
inum7, inum8이 -1이지만, inum7인경우 unsigned를 지정하지 않았기에 컴퓨터가 1칸 shitf 연산하면 차이가 난다.
아래 출력을 비교하자.
inum7= ffffffff
inum8 = 7fffffff

|
|