프로그래밍[Univ]/C언어

[C언어] bit 연산 , 비트 연산

Cloud Travel 2008. 12. 18. 13:18
bit를 연산하는 법에서 알아봅시다. 제 설명이 많이 부족합니다. 처음 부분만 이해하셧다면 쉽게 bit연산을 할수 있습니다.
하지만 저의 설명에 처음 부분은 존재하지 않는 것 같내요 ㅠ
bit는 컴퓨터가 사용하는 숫자로 2진수 0과 1로 나타 내는 것 입니다.
프로그램밍에서의 표현은 변수숫자를 넣을 때 0x를 써주어 16진수로써 사용합니다.
16 진수  = 0 1 2 3 4 5 6 7 8 9 A B C D E F
ex ) 0xffffffff = 1111 1111 1111 1111 1111 1111 1111 1111
      0x0000000e = 0000 0000 0000 0000 0000 0000 0000 1110

1. and연산자 '&'
 '&' 연산자는 다음과 같은 실행을 한다.
  x   y   x & y
  1   0     0
  0   0     0
  0   1     0
  1   1     1

 > 위의 표를 보면 알 수 있듯이 두 변수 비트에 1이 있으면 1을 출력하고, 나머지의 경우에는 0을 출력하는 연산자 입니다.
 ex ) int x = 0x00000001 > 0000 0000 0000 0000 0000 0000 0000 0001
       int y = 0x00000003 > 0000 0000 0000 0000 0000 0000 0000 0011
       x = x & y > 0000 0000 0000 0000 0000 0000 0000 0001

2. or연산자 '|'
 
 '|' 연산자는 다음과 같은 실행을 한다.
  x   y   x | y
  1   0     1
  0   0     0
  0   1     1
  1   1     1

> 위의 표를 보면 알 수 있듯이 두 변수 비트에 0이 있으면 0을 출력하고, 나머지의 경우에는 1을 출력하는 연산자 입니다.
 ex ) int x = 0x00000001 // 0000 0000 0000 0000 0000 0000 0000 0001
       int y = 0x00000003 // 0000 0000 0000 0000 0000 0000 0000 0011
       x = x | y > 0000 0000 0000 0000 0000 0000 0000 0011

3. shift 연산자 '>>','<<'
 '>>'는 오른쪽으로 비트를 밀어내는 연산자 입니다.
 반대로 '<<' 연산자가 존재 하며 왼쪽으로 비트를 밀어낸다.

 예를 들어 
 x = 0x00000002 // 0000 0000 0000 0000 0000 0000 0000 0010
 x = x >> 1; // 0000 0000 0000 0000 0000 0000 0000 0001
 x = x << 3; // 0000 0000 0000 0000 0000 0000 0000 1000
 
이렇게 변화가 된다.

 shift를 시켰을 때의 숫자를 10진수로 바꾸어 생각하면,
 '>>' 일경우는 10진수의 숫자가 1/2가 되고, '<<'일 경우는 10진수의 숫자가 2배가 된다.
 이는 컴퓨터가 2진수를 사용하기 때문에 가능 한 것이다.