[C++] 비트 단위 논리 연산자

Programming/C++_C#|2017. 3. 16. 14:58
반응형

평소에 비트단위연산자를 안써서 볼때마다 자꾸 까먹는데 기록을 해야겠다.






비트란?


우리는 자료형에서 char, short, int등등으로 나타내곤한다.

여기서 char는 1바이트인데 이 때 1바이트는 8비트라고 할 수 있다.

그럼 1비트는 무엇을까?

컴퓨터는 0아니면 1로 신호를 알아듣는데

그 때 1비트가 0이나 1로 표시된다.




이 때 1, 0처럼 나타낼 수 있는 진수는 2진수라 하는데

진법에 관한 건 나중에 포스팅하도록 하겠다.









비트 단위 논리 연산자


비트를 가지고 연산하는 것이 여러 개 있는데 

그 중 오늘은 비트 단위 논리 연산자에 대해 쓰려고 한다.






1. | or


- or연산자 

- 코딩을 할 때는 |

- 둘을 or연산할 때 1이 들어가있으면 무조건 1을 리턴



예1)

0   |   0 = 0

0   |   1 = 1

1   |   0 = 1

1   |   1 = 1



예2)

00110011

00000000   | (or)

--------------------

00110011 



예3)

00110011

11111111   | (or)

--------------------

11111111


1의 값이 있으면 어떤 값을 연산해도 사라지지 않는다.






2. & and


- and연산자

- 코딩을 할 때는 &

- 둘 다 1이여야 1을 리턴하고 그 외에는 전부 0을 리턴


예1)

0   |   0 = 0

0   |   1 = 0

1   |   0 = 0

1   |   1 = 1



예2)

00110011

00000000   & (and)

--------------------

00000000 



예3)

00110011

00000011   & (and)

--------------------

00000011 


첫번째비트와 두번째비트에 1을 넣은 값으로 &연산을 해주면 그 값(1)이 뽑힌다.

주로 몇번째 비트값을 뽑아낼 때 자주 사용한다.






3. ^ xor

- xor연산자

- 코딩을 할 때는 ^

- 두 수가 같으면 0, 다르면 1리턴


예)

0   |   0 = 0

0   |   1 = 1

1   |   0 = 1

1   |   1 = 0



예2)

00110011

00000000   ^ (xor)

--------------------

00110011 



예2)

00110011

11111111   ^ (xor)

--------------------

11001100 


같으면 0, 다르면 1, 암호화에 많이 쓰인다.






4. ~ not

- not연산자

- 코딩을 할 때는 ~

- 논리연산자인 !와 다르고 비트를 뒤집는다.


예1)

~0

-----

-1


00000000 -> 11111111

11111111은 -1이다. (2의 보수방식)



예2)

~-1

-----

0


11111111 -> 00000000

00000000은 0이다.


정리

 인자1

인자2

OR( | ) 

AND( & ) 

XOR( ^ ) 

 0

 0

 1

 1




반응형

'Programming > C++_C#' 카테고리의 다른 글

memcpy함수  (0) 2017.03.23
[C++] 문자열 대문자를 소문자로, 소문자를 대문자로  (0) 2017.03.20
[C++] 오버로딩함수  (0) 2017.02.23
fopen, fclose, fseek함수  (0) 2017.02.23
[C++] 가변인자함수  (0) 2017.02.14

댓글()