-
[C] 연산자 (Operator)C 2021. 12. 8. 04:19
해당 글은 "열혈 C 프로그래밍" 책을 바탕으로 작성되었습니다.
💡 특정 연산을 요구할 때 사용하는 약속된 기호
연산자 우선순위
- 하나의 문장 안에 둘 이상의 연산자가 존재할 때의 혼란을 줄이기 위해 정의함.
- 증가/감소 연산자 → 부호 연산자 → 산술 연산자 → 관계 연산자 → 논리 연산자 → 삼항 연산자 → 할당 → 콤마 연산자 순
연산자의 종류
대입 연산자 [ = ]
- 오른편에 오는 값을 왼편에 오는 변수에 값을 저장하는 형태
산술 연산자 [ +, -, *, /, % ]
복합 대입 연산자 [ +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= ]
- 다른 연산자와 합쳐진 형태의 대입 연산자 ( 'a = a + b' 와 'a += b' 는 동일 연산)
이항 연산자
- 두 개의 피연산자를 요구하는 연산자
부호 연산의 의미를 갖는 + 연산자와 - 연산자
- 이항 연산자로서는 덧셈과 뺄셈을 의미하지만, 피연산자가 하나인 단항 연산자로서는 부호를 뜻하기도 함. (+3, +7, -num 과 같이 숫자 앞에 붙는 부호를 뜻하는 것)
증가, 감소 연산자
- ++num : 값 1 증가 후, 속한 문장의 나머지를 진행
- num++ : 문장 먼저 진행 후, 값 1 증가
- —num : 선 감소, 후 연산
- num— : 선 연산, 후 감소
int num2 = (num1--) + 2; /* 1. num1의 선 연산, 후 감소 2. 정수 2를 더해서 얻은 결과를 num2에 대입 출력 결과 : 소괄호로 묶어졌지만 결과는 11이 아닌 12! (num1 이 10이라고 가정했을 때) => 해당 연산시에는 소괄효의 영향을 받지 않고, 다음 문장으로 넘어가야만 값의 증가/감소가 이루어진다는 사실 */관계 연산자 [ <, >, ==, !=, <=, >= ]
- 대소와 동등의 관계를 따지는 연산자로, 두 개의 값을 비교하기 때문에 '비교 연산자'라고도 함.
- 해당 연산자는 조건을 만족하면 '참(true/1)'을 만족하지 않으면 '거짓(false/0)'을 반환함.
논리 연산자 [ &&, ||, ! ]
- AND (논리곱) [ && ] : A와 B 모두 '참'이면 연산결과로 '참'을 반환
- OR (논리합) [ || ] : A와 B 둘 중 하나라도 '참'이면 '참'을 반환
- NOT (논리부정) [ ! ] : A가 '참'이면 '거짓', A가 '거짓'이면 '참'을 반환
콤마 연산자 [ , ]
- 둘 이상의 변수를 동시에 선언하거나, 둘 이상의 문장을 한 행(line)에 삽입하는 경우 사용
- 둘 이상의 인자를 함수로 전달할 때도 인자의 구분을 목적으로 사용
- 연산의 결과가 아닌 '구분'을 목적으로 주로 사용
조건 연산자 : 피연산자가 3개인 "삼항연산자"
- 조건 연산자는 기호 ? 와 기호 : 로 이루어짐.
- 조건이 '참'이면 연산 결과로 data1이 반환되고, 조건이 '거짓'이면 연산 결과로 data2가 반환됨.
(조건) ? data1 : data2; - 이는 간단한 if~else 문을 대신할 수 있는 연산자로, 프로그래머들이 선호하는 연산자임.
소괄호 연산자
: 먼저 연산하라는 의미
비트 연산자
- 비트 단위로 연산을 진행
- & 연산자 (비트 단위 AND) : 두 개의 비트가 모두 1일 때 1을 반환
1) 00001111 2) 00010100 → &일 때, 00000100 을 반환 - | 연산자 (비트 단위 OR) : 두 개의 비트 중 하나라도 1이면 1을 반환
- ^ 연산자 (비트 단위 XOR) : 두 개의 비트가 서로 다른 경우에 1을 반환
- ~ 연산자 (비트 단위 NOT) : 비트를 0에서 1로, 1에서 0으로 반전시킴. '보수연산'이라고도 불림
+) 음의 정수 크기 확인할 때
: 2진수로 표현된 음의 정수는 양의 정수와 달리 그 값의 크기를 바로 계산하기가 쉽지 않음. 이러한 경우에는 2의 보수법을 사용해 크기를 확인해야 함. (보수 후 +1 하기)
<< 연산자 : 비트의 왼쪽 이동 (shift)
8 << 2 : 정수 8의 비트열을 2칸씩 왼쪽으로 이동시킨 결과를 반환 → 00001111 일 경우, 2칸 이동하면 00111100- 이동으로 인해 생기는 오른쪽 빈칸은 0으로 채워지고, 왼쪽 비트들은 버려짐. 즉, 왼쪽으로 1칸씩 이동할 때마다 정수의 값은 두 배가 되고, 오른쪽 이동시에는 2로 나누어짐.
>> 연산자 : 비트의 오른쪽 이동 (shift)
- 만약 값이 음수인 경우 CPU에 따라서 값이 달라짐. 음의 값 유지를 위해 1을 채우는 CPU도 있고, 상관없이 0을 채우는 CPU도 있기 때문. (보통 1로 채움)
'C' 카테고리의 다른 글
[C] 반복문 (0) 2021.12.08 [C] 상수 (Const) (0) 2021.12.08 [C] 변수 (Variable) (0) 2021.12.08 [C] 자료형 (Data Type) (0) 2021.12.08 [C] 함수 (Function) (0) 2021.12.08