블로그 이미지
송시혁

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

 

연산자 &&

비트연산자&

예) 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




 












 

 

















'C언어 수업정리 > 3월 수업정리' 카테고리의 다른 글

3월 25일 함수 실습  (0) 2013.03.25
3월 25일 함수 예제 6-1  (0) 2013.03.25
3월 22일 fscanf, fprintf 알아보기  (0) 2013.03.25
3월 22일 예제 5-10  (0) 2013.03.23
3월 22일 file구조, feof(진행중)  (0) 2013.03.22
posted by 송시혁