happy coding

[c] 연산자 본문

self study/언어의 기본부터

[c] 연산자

yeoonii 2022. 11. 17. 13:42
TCP school을 보고 정리한 내용입니다.

연산자(operator)

연산자란 프로그램의 산술식이나 연산식을 표현하고 처리하기 위해 제공되는 다양한 기호를 의미한다.

산술 연산자(arithmetic operator)

산술 연산자는 사칙연산을 다루는 기본적이면서도 가장 많이 사용되는 연산자이다. 또, 모두 2 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다.

+ 왼쪽의 피연산자에 오른쪽 피연산자를 더한다.
- 왼쪽의 피연산자에서 오른쪽 피연산자를 뺀다.
* 왼쪽의 피연산자에 오른쪽 피연산자를 곱한다.
/ 왼쪽의 피연산자를 오른쪽 피연산자로 나눈다.
% 왼쪽의 피연산자를 오른쪽 피연산자로 나눈 다음, 그 나머지를 반환한다.

연산자의 우선순위(operator precedence)와 결합 방향(associativity)

연산자의 우선순위는 수식 내에 여러 연산자가 함께 등장할 때, 어느 연산자가 먼저 처리될 것인가를 결정한다. 가장 높은 우선순위를 가지고 있는 괄호() 연산자를 사용하여 연산자의 처리 순서를 변경한다. 연산자의 결합 방향은 수식 내에 우선순위가 같은 연산자가 둘 이상 있을 때, 먼저 어느 연산을 수행할 것인가를 결정한다.

C언어 연산자의 우선 순위표

1 ++(후위 증가 연산자),--(후위 감소 연산자),()(괄호),[](첨자 연산자),.(참조에 의한 선택),->(포인터를 통한 선택)
2 !(논리 NOT),~(비트 NOT),+(단항 연산자),-(단항 연산자),++(전위 증가 연산자),--(후위 감소 연산자)(타입)(타입 캐스트 연산자), *(참조 연산자), &(주소 연산자), sizeof(크기)
3 *,/,%
4 +,-
5 <<(비트 왼쪽 시프트 연산자), >>(부호 비트를 확장하면서 비트 오른쪽 시프트)
6 <,<=,>,>= (관계 연산자)
7 ==,!= (관계 연산자)
8 &(비트 AND)
9 ^(비트 XOR)
10 |(비트 OR)
11 &&(논리 AND)
12 ||(논리 OR)
13 ? :(삼항 조건 연산자)
14 =(대입 연산자 및 복합 대입 연산자)
15 ,(쉼표 연산자)

우선순위가 빠른 연산자가 가장 먼저 실행된다. 또한, 같은 우선순위를 가지는 연산자가 둘 이상 있을 때에는 결합 순서에 따라 실행 순서가 결정된다.

대입 연산자(assignment operator)

대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.

= 왼쪽의 피연산자에 오른쪽의 피연산자를 대입한다.
+= 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결과값을 왼쪽의 피연산자에 대입한다.
-= 왼쪽의 피연산자에 오른쪽의 피연산자를 뺀 후, 그 결과값을 왼쪽의 피연산자에 대입한다.
*= 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결과값을 왼쪽의 피연산자에 대입한다.
/= 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 결과값을 왼쪽의 피연산자에 대입한다.
%= 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 나머지값을 왼쪽의 피연산자에 대입한다.

증감 연산자(increment and decrement operator)

증감 연산자는 피연산자를 1씩 증가 혹은 1씩 감소시킬 때 사용하는 연산자이다. 이 연산자는 피연산자가 단 하나뿐인 단항 연산자이고, 연산자의 위치에 따라 연산의 순서 및 결과가 달라진다.

++a 먼저 피연산자의 값을 1 증가시킨 후에 해당 연산을 진행한다.
a++ 먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 증가시킨다.
--a 먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 진행한다.
a-- 먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 감소시킨다.

비교 연산자(comparison operator)

비교 연산자는 피연산자 사이의 상대적인 크기를 판단하는 연산자이다. 

== 값이 true라면 1을 반환한다.
!= 값이 true라면 1을 반환한다.
> 값이 true라면 1을 반환한다.
>= 값이 true라면 1을 반환한다.
< 값이 true라면 1을 반환한다.
<= 값이 true라면 1을 반환한다.
C언어에서 거짓(false)는 0이고, 0이 아닌 모든 것은 참(true)으로 인식된다.

논리 연산자(logical operator)

논리 연산자는 주어진 논리식을 판단하여, 참(true)과 거짓(false)을 결정하는 연산자이다. AND와 OR은 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다. NOT은 피연산자가 단 하나뿐인 단항 연산자이며, 피연산자의 결합방향은 오른쪽에서 왼쪽이다.

&& 논리식이 모두 참이면 1을 반환한다. (논리 AND 연산) 모두 1이면 1반환, 나머지 0
|| 논리식 중에서 하나라도 참이면 1을 반환한다. (논리 OR 연산) 모두 0이면 0반환, 나머지 1
! 논리식의 결과가 참이면 0을, 거짓이면 1을 반환한다. (논리 NOT 연산) 값의 반대

비트 연산자(bitwise operator)

비트 연산자는 비트(bit)단위로 논리 연산을 할 때 사용하는 연산자이다. 또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용한다.

& 대응되는 비트가 모두 1이면 1을 반환한다. (비트 AND연산)
| 대응되는 비트 중에서 하나라도 1이면 1을 반환한다. (비트 OR연산)
^ 대응되는 비트가 서로 다르면 1을 반환한다. (비트 XOR연산)
~ 비트를 1이면 0으로, 0이면 1로 반전시킨다. (비트 NOT연산)
<< 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킨다. (left shift 연산)
>> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킨다. (right shift 연산)

삼항 연산자(ternary operator)

삼항 연산자는 다른 언어에는 존재하지 않고 C언어에만 존재하는 독특한 연산자이며, 유일하게 피연산자를 3개나 가지는 조건 연산자이다.

조건식 ? 반환값1 : 반환값2

여기서 물음표(?) 앞의 조건식에 따라 결과값이 참(true)이면 반환값1을 반환하고, 거짓(false)이라면 반환값2를 반환한다. 이때, 반환값에는 값뿐만 아니라 수식, 함수 호출 등 여러 형태의 명령문이 올 수 있다. 삼항 연산자는 짧은 if/else문 대신 사용할 수 있고, 코드를 간결하게 작성할 수 있도록 도와준다. 

쉼표 연산자

쉼표 연산자는 얼핏 연산자가 아닌 것처럼 보이지만 다양한 용도로 사용되는 연산자이다. 어떠한 연산을 수행하는 것은 아니지만, 1. 두 연산식을 하나의 연산식으로 나타내고자 할 때 2. 둘 이상의 인수를 함수로 전달하고자 할 때 사용한다.

sizeof 연산자

사용자의 컴퓨터 환경에 따라 타입에 할당되는 메모리의 크기가 달라질 수 있는데, sizeof 연산자는 단항 연산자로 피연산자의 크기를 바이트 단위로 반환한다. 이 연산자는 피연산자로 타입뿐만 아니라 변수나 상수를 전달받을 수도 있다. sizeof 연산자에 변수나 상수가 피연산자로 전달되면, 해당 변수나 상수에 해당하는 타입의 크기를 반환해준다.

포인터 연산자

1. 주소 연산자(&)는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환한다. 이는 번지 연산자라고도 불린다.

 

2. 참조 연산자(*)는 포인터의 이름이나 주소 앞에 사용하여, 포인터에 가리키는 주소에 저장된 값을 반환한다.

 

 

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 반복문  (0) 2022.11.18
[c] 조건문  (0) 2022.11.18
[c] 타입 변환  (0) 2022.11.16
[c] 변수와 상수  (0) 2022.11.15
[c] 변수  (0) 2022.11.15
Comments