본문 바로가기
언어/C++

[C++ 기본 공부정리] 3-2. 연산자(operator)

by 민-Zero 2019. 11. 15.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

5. 논리 연산자(logical operator)

논리 연산자는 주어진 논리식에 대해 참(true)과 거짓(false)을 결정하는 연산자이다.

! 는 단항 연산자이다.

&& 두항을 비교하여 두항이 모두 참인 경우 1을 반환한다. (AND연산)
|| 두항을 비교하여 둘중 하나의 항이 참인 경우 1을 반환한다. (OR연산)
! 항의 결과가 참이면 0을 거짓이면 1을 반환한다. (NOT연산)
x y x && y x || y !x
T T 1 1 0
T F 0 1 0
F T 0 1 1
F F 0 0 1

 

6. 비트 연산자(bitwise operator)

비트 연산자는 비트 단위로 논리 연산을 사용할 때 이용된다.

& 두항의 비트를 비교 같은 자리의 비트가 모두 1일 경우 1을 반환 (비트AND)
| 두항의 비트를 비교 같은 자리의 비트중 1이 존재할 경우 1을 반환 (비트 OR)
^ 두항의 같은 자리의 비트가 서로 다를 경우 1을 반환 (비트 XOR)
~ 비트가 1일 경우 0으로, 0일 경우 1로 반환 (비트 NOT, 1의 보수)
<< 지정한 수만큼 비트를 왼쪽으로 이동 (left shift)
>> 지정한 수만큼 비트를 오른쪽으로 이동 (right shift)

예를 들어 00010110 ^ 00111111 라면 00101001 즉 41을 반환할 것이다.

 3의 경우 00000011의 비트 값을 가진다. 이를 1만큼 right shift를 실행할 경우 00000001 즉 1의 값을 반환하게 되고 left shift의 경우 00000110 즉 6의 값을 반환한다.

 

7. 삼항 연산자(ternary operator)

삼항 연산자는 유일하게 3개의 피연산자를 가진다.

조건식? 변수 1 : 변수 2의 형태로 사용한다.

조건식을 판별하여 결과가 true라면 변수 1을 반환하고 false 라면 변수 2를 반환한다.

조건식 10 < 7의 경우 10이 7보다 크므로 false를 반환하므로 x : y 중 y값이 출력되는 결과이다.

 

8. 쉼표 연산자

쉼표의 경우 2가지의 경우에서 사용된다.

-두 연산식을 하나의 연산식으로 나타내고자 할 때

-둘 이상의 변수를 함수로 전달할 때

위의 경우는 두 연산식 즉 대입 연산을 하나의 연산식으로 나타낸 경우이다.

 

9. sizeof 연산자

sizeof연산자는 앞서 변수 타입에서 보았던 변수 타입마다의 할당되어지는 메모리의 크기를 반환하는 연산자이다.

바이트 단위로 값이 반환된다. 

사용자의 컴퓨터 환경(몇 비트 운영체제 등)에 따라 할당되는 메모리의 크기가 다를 수 있다.

10. 범위 지정 연산자(scope resolution operator)

범위 지정 연산자(::)는 여러 범위에서 사용된 식별자(identifier)를 구분하는 데 사용하는 연산자이다.

식별자로는 변수, 함수 또는 열거체가 올 수 있다.

범위::식별자의 형태로 사용된다.

::변수명 (전역 변수로 사용하라는 의미)

namespace::식별자 (해당 네임스페이스 안의 식별자)

클래스 이름::식별자 (해당 클래스 안의 식별자)

 

 

※연산자의 순서

수학에서 사칙연산이 섞여 있을 경우 곱하기 나누기 먼저 더하기 빼기는 나중에 계산하고 우선순위가 같을 경우 왼쪽에서부터 계산하는 것처럼 지금까지 알아본 연산자 들에도 우선순위가 존재한다.

위에서부터 우선순위가 높은 순서이다.

기호 유형
[ ] ( ) . ->
++ --(후치)
sizeof & * + - ~ !
++ --(전치)
단항
typecasts 단항
* / % 곱하기
+ - 더하기
<< >> 비트 시프트
< > <= >= 관계
== != 같음
& 비트 AND
^ 비트  XOR
| 비트 포함 OR
&& 논리 AND
|| 논리 OR
? : 조건식
= *= /= %=
+= -= <<= >>= &=
^= |=
단순 및 복합 할당 2
, 순차적 계산

(표 출처: https://docs.microsoft.com/ko-kr/cpp/c-language/precedence-and-order-of-evaluation?view=vs-2019)

댓글