두 피연산자의 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++ 강좌 전체 목록 >>>
댓글 없음:
댓글 쓰기