두 피연산자의 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++ 강좌 전체 목록 >>>


c{c++},n{c0051}

'프로그래밍언어.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
Posted by 살레시오
,