비트연산자
연산자 | 기능 | 수식 | 수식의 의미 |
& | 논리곱 | 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해서 사용해야 한다.
'나미 > C' 카테고리의 다른 글
C언어 OCI LIB으로 코딩하기!! (0) | 2016.12.15 |
---|---|
10진수 16진수로 변환 후 16진수를 그대로 문자열에 복사하는 방법 (0) | 2015.11.03 |
24.지역변수와 전역변수 (0) | 2013.04.05 |
23. 배열 (0) | 2013.04.03 |
22. 함수선언과 정의 (0) | 2013.03.28 |
20. 메모리를 구성하는 5가지 영역 (0) | 2013.03.21 |
19. IEEE 754 표준 - float, double형의 실수저장방식 (0) | 2013.03.21 |
18. Point와 Symbol Table (0) | 2013.03.20 |
17. 제어문 - 반복문, getch()와 getche() (0) | 2013.03.15 |
16. 제어문 - 복합문, 선택문 (0) | 2013.03.14 |