일단

비트연산에는 크게 & ~ | ^ 가 있다.

and not or xor 이지.

그 외에는 << 와 >> 가 있고 쉬프트 연산자 라고 부른다.


and는 논리곱
x and y 에 대한 진리표를 그려보면

x y 결과
0 0 0
0 1 0
1 0 0
1 1 1

둘다 참일때 결과가 참.

곱하기라고 생각하면 되시겠다.


not 은 비트 반전이다.

00001111 을 ~ 하면
11110000 이 된다.


or 은 논리합.

x y 결과
0 0 0
0 1 0
1 0 1
1 1 1

둘중의 하나라도 1이면 1이다.

더하기라고 생각하면 되시겠다.


^은 베타적논리합.
두 비트가 다르면 참이다.

x y 결과
0 0 0
0 1 1
1 0 1
1 1 0


기타 연산으로는 nand나 nor 도 있는데 다른 언어는 모르겠고 C계열 언어에서 따로 지원은 안해준다.

nand는 not and 이니 ~(x & y) 로 쓰면 되고 nor 는 not or 이니 ~(x | y) 로 쓰면 된다.

 

쉬프트 연산자는 그냥 비트를 밀고 땡기는거다.

0010 << 1 은 한칸 밀라는 뜻.
0100 이 된다.

0010 <<2 였다면
1000 이 되겠지.

>>는 반대.

이건 signed와 unsigned가 다르게 동작한다.

unsigned 의 경우 예상대로 잘 동작하지만

signed 음수일 경우 부호비트는 변하지 않는다.

정상적으로 쉬프트 하려면 unsigned로 강제캐스팅해서 조지면 된다.


추가적으로..

>> 1 은 / 2 의 효과가 있고

<< 1 은 * 2 의 효과가 있다.

4 << 1 은 8이고

16 >> 1 은 8 이란 소리.

 



비트마스크는

1001 1100 이라는 변수가 있을때 하위 4비트만 취하겠다 라는 생각을 가지고 있다면
마스크로는 0000 1111 을 씌워주면 되겠다.

즉,

1001 1100
0000 1111
해서
0000 1100
이 나온다.
16진수로 보자면
0x9C & 0xFF = 0x9C

이해 안되면 나가뒈져




아무도 관심을 안가져줘서 제목 바꿨다.

비트연산을 실제로 어떤 상황에서 사용하는지는 귀찮아서 안썼다.

원한다면 나중에.


비트연산에 대한 깊은 이해를 하고싶으면 논리회로를 봐라.