C/C
[C언어] 연산자(operator)
Hya68
2024. 12. 26. 14:56
연산자(operator)란?
- 자료에 대해 각종 연산을 수행하게 하는 기호
- 종류
산술 연산자 +, -, *, /, %, ++, -- 관계 연산자 >, <, >=, <=, ==, != 논리 연산자 &&, ||, ! 대입 연산자 +=, -=, *=, /=, %=, ≪=, ≫=, !=, &= 조건 연산자 ? : 비트 연산자 &, |, ^, ~, ≫, ≪ 기타 연산자 sizeof(), cats, &, *
산술 연산자
이항 연산자 (binary operator) |
+, -, *, / | 사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈) | 16 + 5 (결과: 21) |
% | 나머지 연산자 | 16 % 5 (결과: 1) | |
단항 연산자 (unary operator) |
- | 부호의 반전 | -5 |
++ | 증감 연산자 | 5++(후위연산), ++5(전위연산) | |
-- | 5-- (후위연산) , --5 (전위연산) |
- 후위연산 : 값을 먼저 사용 후 1 증감
- 전위연산 : 1 증감 후 값을 사용
- 예) a=5; i = a++;, j = ++a; (결과 : a는 7, i는 5, j는 7)
관계 연산자(relational operator)
== | 왼쪽 피연산자와 오른쪽 피연산자가 같으면 1 반환 | a == b |
!= | 왼쪽 피연산자와 오른쪽 피연산자 다르면 1 반환 | a != b |
>, >=, <=, < | 왼쪽 피연산자와 오른쪽 피연산자의 대소 관계를 비교 | a >= b |
- 피연산자에 대한 대소 관계 비교
- 참이면 1, 거짓이면 0 반환
논리 연산자(logical operator)
&& | 논리곱(AND) : 모두 참이면 1 반환 | a && b |
|| | 논리합(OR) : 둘 중 하나라도 참이면 1 반환 | a || b |
! | 논리부정(NOT) : 논리식 결과가 참이면 0, 거짓이면 1 반환 | !a |
- 주어진 논리식을 판단
- 진리표
a b a && b a || b !a 1 (true) 1 (true) 1 (true) 1 (true) 0 (false) 1 (true) 0 (false) 0 (false) 1 (true) 0 (false) 0 (false) 1 (true) 0 (false) 1 (true) 1 (true) 0 (false) 0 (false) 0 (false) 0 (false) 1 (true)
비트 연산자(bitwise operator)
& | 대응되는 비트가 모두 1이면 1을 반환 (비트 AND 연산) | a & b |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환 (비트 OR 연산) | a | b |
^ | 대응되는 비트가 서로 다르면 1을 반환 (비트 XOR 연산) | a ^ b |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴 (비트 NOT 연산) | ~a |
<< | 지정한 수만큼 비트들을 전부 왼쪽으로 이동 (left shift 연산) | a << 2 |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동 (right shift 연산) | a >> 2 |
- 수치를 2진수로 변환하여 bit 단위의 연산 수행
- 비트 시프트(<<, >>) 연산 : 이동 후 빈 공간에는 0이 채워짐
대입 연산자(assignment operator)
= | 왼쪽의 피연산자에 오른쪽의 피연산자를 대입 | a = 5 (기본값) |
+= | 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a += 5 (결과 : a는 10) |
-= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a -= 5 (결과 : a는 0) |
*= | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a *= 5 (결과 : a는 25) |
/= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a /= 5 (결과 : a는 1) |
%= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입 | a %= 5 (결과 : a는 0) |
&= | 왼쪽의 피연산자와 오른쪽의 피연산자에 대해 bit 단위의 AND 연산을 한 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a &= 5 (결과 : a는 5) |
|= | 왼쪽의 피연산자 와 오른쪽의 피연산자에 대해 bit 단위의 OR 연산을 한 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a |= 5 (결과 : a는 5) |
^= | 왼쪽의 피연산자와 오른쪽의 피연산자에 대해 bit 단위의 XOR 연산을 한 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a ^ = 5 (결과 : a는 0) |
<<= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼의 bit 왼쪽으로 이동 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a <<= 1 (결과 : a는 10) |
>>= | 왼쪽의 피연산자를 오른쪽의 피연산자 만큼의 bit 오른쪽으로 이동 후, 그 결괏값을 왼쪽의 피연산자에 대입 | a >>= 1 (결과 : a는 2) |
- 연산자의 오른쪽을 왼쪽에 대입
- 수식을 압축하여 기술 → 프로그램의 길이 축소 및 실행 속도 감소
조건 연산자(conditional operator)
- 형식 : (조건) ? 수식 1 : 수식 2;
- 조건이 참이면 수식 1 수행, 거짓이면 수식 2 수행
- 삼항 연산자라고도 함
- 예) int a = 10; a < 3 ? 1 : 0; (결과 : 0)
기타 연산자
sizeof() | 지정한 자료형, 수식, 변수가 차지하는 기억공간의 크기(byte)를 구함 | sizeof(int) (결과 : 4) |
cast(형변환) | 지정된 자요형을 다른 자료형으로 강제적으로 바꿈 | (float)10/4 (결과 : 2.25) |
& | 주소 연산자, 피연산자의 주소를 나타냄 | &a |
* | 참조 연산자, 피연산자의 내용을 나타냄 | *a |
- 형변환
- 자동 형변환
- 컴파일러에 의해 자동으로 발생하는 형변환
- 예) int a = 3, b = 4; double c = a / b; (결과 : 0.00000)
- 위의 예시에서 보면 우선 int형으로 a / b 계산 후의 결괏값을 double형으로 나타낸 것
- 강제 형변환
- cast 연산자를 사용하여 형변환을 명시해서 강제로 변환이 일어나는 것
- 예) int a = 3, b = 4; double c = (double)a / b; (결과 : 0.00000)
- 위의 예시에서 보면 우선 a를 double형으로 형변환 한 후 a / b 계산 후의 결괏값을 나타낸 것, 이 때 b는 산술연산 형변환 규칙에 의해 자동으로 double형이 된다.
- 자동 형변환
연산자 우선순위
- 수학과 마찬가지로 C언어에서 제공되는 모든 연산자에는 연산자 우선순위가 정해져있음
- 즉, 하나의 연산식에 여러 연산자가 사용될 경우 연산자 우선순위에 의해 실행됨
괄호, 구조체, 공용체 연산자 (), [], ->, . 높음
↕
낮음단항 연산자 !, ~, ++, --, &, *, sizeof(), cast 이항연산자 *, /, % +, - <<, >> <<=, >>= ==, != & ^ \ && || 조건 연산자 ? : 대입 연산자 =, +=, *=, ..., &=
참고자료
[도서]
- C 프로그래밍 (저자 김형근, 곽덕훈, 정재화 / 2020 발행)
[웹사이트]
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com