두 피연산자의 or 연산은 같은 자리의 비트끼리의 or 연산을 전체 비트들에 대해서 수행하며 다음 표에 bitwise - or 연산을 정리하였다. 두 비트가 모두 0이어야 0이고 하나라도 1이라면 1이 된다.
[표 1] 비트 or 연산
x | y | x+y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
앞의 경우와 같은 예제를 살펴보자.
unsigned char ucx = 0x3a, ucy = 0xb2, ucz ;ucz = ucx | ucy; |
이제 변수 ucz에 저장되는 값은 다음과 같이 계산된다.
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||||
ucx | = | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | (0x3a) | |
| | ucy | = | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | (0xb2) |
ucz | = | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | (0xba) |
이 결과를 보면 같은 위치의 비트끼리 bit-or 연산을 취한 결과가 얻어진다는 것을 알 수 있다.
여기서 소개한 bitwise-or 연산자는 특정 비트를 강제로 1로 만들고 싶을 때도 많이 사용된다. 예를 들어 ucm변수가 1바이트값 0x2A라고 했을 때 3번, 4번, 7번 비트만 1로 강제로 만들고 싶다면 다음과 같이 하면 된다.
unsigned char ucm = 0x2A;ucm |= 0x98; |
여기서 0x98은 이진수로 0b10011000 이고 3번, 5번, 7번 비트만 1, 나머지는 0인 수이다. 이것과 ucm을 or 연산을 한 결과는 3번, 5번, 7번 비트만 무조건 1로 만들고 나머지는 그대로 놔둔 수를 얻게 된다.
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||||
ucm | = | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | (0x2A) | |
| | 0x98 | = | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | (0x98) |
ucm | = | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | (0xBA) |
이렇게 특정한 비트를 1로 강제로 변환시키는 연산도 마스킹(masking)이라고 한다.
C++ 강좌 전체 목록 >>>
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
C/C++의 bitwise-not 연산 (~) (0) | 2015.05.20 |
---|---|
C/C++의 bitwise-xor 연산 (^) (0) | 2015.05.20 |
C/C++의 bitwise-and 연산 (0) | 2015.05.20 |
C/C++의 비트 연산자의 종류 (0) | 2015.05.20 |
C/C++의 대입연산자 (0) | 2015.05.20 |