21. 비트연산자
비트연산자
연산자 | 기능 | 수식 | 수식의 의미 |
& | 논리곱 | a&b | a와 b의 논리곱 |
| | 논리합 | a|b | a와 b의 논리합 |
^ | 베타적 논리합 | a^b | a와 b의 베타적 논리합 |
~(틸트) | 비트반전 | ~a | a의 각 비트를 반전 |
<< | 좌측이동 | a<<b | a를 b만큼 좌측으로 이동 |
>> | 우측이동 | a>>b | a를 b만큼 우측으로 이동 |
172와 106으로 예시
&&와 &의 차이
172 && 106 = 1 의 결과값이 나온다 이것은 단순히 앞에서 설명했듯이 참(1)과 거짓(0)만 구별하는 논리식
172 & 106 = 40 이라는 결과값이 나오게 된다. 좀더 자세히 알아보자.
172 => 1010 1100 2진수
106 => 0110 1010 2진수
1 0 1 0 1 1 0 0 > 172
& 0 1 1 0 1 0 1 0 > 106
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ
0 0 1 0 1 0 0 0 > 40
둘다 1이 되는 값은 (1) 이외에 나머지는 모두 (0)으로 계산한다.
172 | 106 = 238 이라는 결과값이 나오게 된다. 좀더 자세히 알아보자.
1 0 1 0 1 1 0 0 > 172
| 0 1 1 0 1 0 1 0 > 106
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1 1 1 0 1 1 1 0 > 238
둘다 0이면(0) 이외에 하나라도 1이 있으면 모두(1)으로 계산한다.
172 ^ 106 = 198 이라는 결과값이 나오게 된다. 좀더 자세히 알아보자.
1 0 1 0 1 1 0 0 > 172
^ 0 1 1 0 1 0 1 0 > 106
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1 1 0 0 0 1 1 0 > 198
서로 틀리면 (1) 서로 같으면 모두 (0)으로 계산한다.
~ 172를 비트반전
1 0 1 0 1 1 0 0 > 172
~
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ
0 1 0 1 0 0 1 1 > -173
172의 경우 처음 시작하는 2진수의 숫자가 1이므로 음수로 저장. unsigned를 붙여주지 않으면 1의 보수를 취해버려서 값이 -173이 나온다.(4바이트이므로 char로 casting 해줄것 )
172 >> 1 우측으로 한칸 이동
1 0 1 0 1 1 0 0 > 172
>>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1 0 1 0 1 1 0 > 86
오른쪽으로 한칸 이동하여서 결과값이 86이 나오게 된다. 여기서 주의해야할 점이있다. unsigned를 붙이지 않을경우 음수의 경우는 앞에 비어있는 칸에 1이 채워질수 있으므로 정확히 해야한다.
※ 비트연산자는 char, int 형은 되지만 float형은 지원하지 않는다 .
사용하고 싶다면 반드시 casting해서 사용해야 한다.