[C언어]비트 연산자의 특징. 비트 연산자의 활용.
AND |
OR |
XOR | ||
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
기본적인 특징.
AND : 둘 다 1 인 경우, 둘 다 참인 경우에만 1.
OR : 둘 중 하나만 1 이면 무조건 1.
XOR : 두개가 서로 다른 경우에만 1.
~ 연산자 : 비트 단위 NOT
~ 0 => 1
~ 1 => 0
<< 연산자 : 왼쪽 쉬프트 연산자
0000000000001111
↑ 맨 왼쪽의 두 비트는 삭제.
0000000000111100
↑ 오른쪽끝부터 삭제된 갯수만큼 00이 채워진다.
부호비트까지 영향을 미치는 연산이기 때문에 정확하게 사용하지 않으면 , 오류가 발생하기 쉽다.
>> 연산자 : 오른쪽 쉬프트 연산자
a>>b ☞ a의 비트를 b칸씩 왼쪽으로 이동한 값을 반환
8>>2 ☞ 8의 비트를 2칸씩 왼쪽으로 이동한 값을 반환
&연산자의 활용.
&연산의 경우 1 과 1인 경우에만 1이 나온다.
따라서 & 1을 하면 대상이 0 이면 0, 1이었다면 1이 나오는 셈이다.
즉, 무언가에 & 1 연산을 했다면 그 결과 값은 무언가(연산의 대상. 원본 값)의 값과 같다.
반대로 & 0을 하면 무조건 0. 즉 무언가의 값을 지우는 경우에 사용한다.
익스클루시브 or의 경우
같으면 1 다르면 0 이기 때문에. 0이던 1이던 동일한 값과 계속 연산을 하면
연산을 할 때마다 값이 순차적으로 바뀐다.
0 1 -> 1 다시 1과 연산하면 0, 다시 1과 연산하면 1
일종의 한번 버튼을 누르면 들어가고, 다시 누르면 도로 나오는. 형식의 버튼.
or는 일반적인 스위치. on 상태에서 계속 on 눌러도 이미 눌러져 있어서 눌러지지 않음.
a = 15, b = 5, c =3 인 경우에서 a < b < c 는 거짓이 나와야 한다
temp = a < b < c; 이러면 오류는 아니지만 사람과 다른 연산을 하게 된다.
먼저 a<b를 연산한다. 15<5 비교 연산이기 때문에 값은 참 거짓, true false, 1 0 식.
무튼 그 값은 거짓, false, 1 이런 값이 나오게 된다. 그리고는 그 값과 < c 를 하게된다.
1 < 3 따라서 true 참이 되고 temp에는 참이 되게 된다.
a<b를 먼저 연산하고 그 값에 < c를 연산 한다.
거짓 && 변수 를 하게 되면 && 연산의 특징상 어느 하나 0이면 0이기 때문에
위의 연산은. 0이 이미 나온 상태에서 &&는 연산 자체를 하지 않는다. 무시해버림.
또한, 참 || 변수 의 경우도 || 의 특징상 하나만 1이면 참 이기 때문에
이미 참이 나온 상태에서 || 연산 자체를 하지 않는다.
이진수로 바꾸는 코딩.
매번 나누어서 역순으로 출력하는 것 대신에 정수는 4바이트 즉 32개의 비트로 되어있어서
10000000 00000000 00000000 0000000 과 & 연산을 한다.
이렇게 되면 1자리와 &를 하는 숫자에 결과는 원본의 값과 같다. 0 과 &연산은 무조건 0.
그리고는 위 숫자를 대상 변수를 왼쪽으로 1칸씩 쉬프트 하면서 계속 & 연산.
그렇게 해서 나온 결과 값을 차례로 출력하게 되면 원본의 값이 나오게 되는 셈이다.
대상 변수의 값 32비트를 1과 한번씩 전부 비교해서 그 값을 출력하는 것.
위 값을 표시하기 위해서 16진수로 사용하며, 이는 0x8000 이 된다.