본문 바로가기

프로그래밍./공통 내용

[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 이 된다.