일단
비트연산에는 크게 & ~ | ^ 가 있다.
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
이해 안되면 나가뒈져
아무도 관심을 안가져줘서 제목 바꿨다.
비트연산을 실제로 어떤 상황에서 사용하는지는 귀찮아서 안썼다.
원한다면 나중에.
비트연산에 대한 깊은 이해를 하고싶으면 논리회로를 봐라.
msb 가만히 있고 나머지 비트만 슆트
피연산자가 음수일경우에도 >> 1 하면 /2의 효과? -_-;;
에고위에 리플 지웠는대.. \'ㅅ\'
onepare // 경우에따라서는 부시놈이 설사를할수도 있음