2024.6.25 교재 113p~
이번에느 데이터를 가공하는 다양한 연산자를 알아보고 연산자를 효율적으로 사용하는 방법을 알아본다.
< 산술 연산자 >
산술 연산자에는 +, -, *, /, %(나머지) 가 있다.
모두 2개의 피연산자(연산의 대상이 되는 데이터)를 사용하며, -는 피연산자를 하나만 사용할 때 피연산자의 부호를 바꾸는 역할도 한다.
나눗셈 연산은 피연산자가 모두 실수이면 실수, 피연산자가 모두 정수이면 몫만 계산되므로 값을 저장하는 변수도 그에 맞게 사용해야한다.
실수 연산에는 나머지의 개념이 없으므로 나머지 연산자의 피연산자로는 반드시 정수만 사용한다.
< 증감 연산자 >
예를 들어, a라는 int형 변수에 1을 더하려면 a = a + 1; 이라고 할 수 있지만, 더 간단하게 a++ 로 표현할 수 있다.
이는 -연산에서도 마찬가지이다.
즉, 대입 연산까지 수행하므로 변수의 값을 1씩 증가시키거나 감소시킬 때 쉽게 사용할 수 있다. 하지만 증감 연산자의 피연산자로 상수를 사용할 수 없다.
전위 표기: ++a 와 같이 표현한다. 값이 증감하고 나서 연산에 사용한다.
후위 표기: b++ 과 같이 표현한다. 연산에 사용하고 나서 값이 증감한다.
< 관계 연산자 >
대소 관계 연산자: < 또는 > 기호로 사용한다.
동등 관계 연산자: ==(같다) 또는 !=(같지 않다) 기호로 사용한다.
관계 연산자 모두 피연산자 2개를 사용하며 연산의 결과값은 1 또는 0이다.
동등 관계 연산자는 같은지를 물어보는 것이고, 대입 연산자는 대입하는 것이므로 둘은 엄연히 다른 것이다.
< 논리 연산자 >
논리 관계를 판단하는 데 사용하며, &&(AND), ||(OR), !(NOT) 이 있다.
&&는 2개의 피연산자가 참일 때만 결과가 참이고, ||는 둘 중에 하나라도 참이면 결과는 참이된다.
!는 피연산자를 하나 사용해 그 참과 거짓을 바꿀 때 사용한다.
예를 들어 관계 연산자만을 사용하여 10 < a < 20 을 사용한다고 해보자. a=30이라고 가정한다.
먼저 10 < a 에서 a의 값에 30을 대입한다. 10 < 30은 참이므로 1을 대입한다.
그러면 10 < a를 1로 대입하여 1 < 20으로 연산하기 때문에 참이므로 이 식은 결과값이 1이다.
다른 예시로 (10 < a) && (a < 20) 을 사용한다고 해보자. 이 때도 a=30으로 가정한다.
먼저 10 < a에서 30을 대입하면 10 < 30이므로 참이여서 1을 대입한다.
다음으로 a < 20에서 30을 대입하면 30 < 20이므로 거짓이여서 0을 대입한다.
즉, 1 && 0이 되어서 최종적으로 결과값은 0이된다.
때문에 수식을 만들 때는 늘 유의해야한다.
숏 서킷 룰: &&와 ||는 좌항만으로 연산결과를 판별하는 기능이다.
예를 들어 &&는 좌항이 거짓이면 우항과 관계없이 결과는 거짓이므로 우항을 살펴볼 필요가 없다.
||는 좌항이 참이면 우항과 관계없이 결과는 참이므로 우항을 실행하지 않는다.
< size of 연산자 >
피연산자를 하나만 사용할 수 있으며, 피연산자의 크기를 바이트 단위로 계산하여 알려준다.
sizeof(피연산자) 형식으로 표기하며 피연산자의 대상은 변수, 상수, 수식, 자료형 등이 될 수 있다.
1바이트는 8비트이므로 int형 변수는 메모리에 32비트의 데이터를 저장할 수 있다.
문자열 끝에는 널 문자 \0이 삽입되므로 sizeof(A)의 값은 2가 된다.
sizeof는 괄호를 사용하므로 함수로 오해하는 경우가 있지만, 연산자임을 기억하자.
< 복합대입 연산자 >
대입 연산자, 증감 연산자를 제외한 다른 연산자는 연산하고 나서 피연산자의 값을 바꾸지 않는다.
만약, 연산 결과를 피연산자에 저장할 필요가 있다면 추가로 대입 연산을 수행해야하는데, 이때 복하변산자를 사용하면 간편하다.
복합대입 연산자는 연산 결과를 다시 피연산자에 저장한다.
+=, -=, *=, /= %= 의 5가지가 있다.
왼쪽 피연산자는 반드시 변수가 와야하며, 오른쪽 항의 계산이 모두 끝난 후 즉, 가장 마지막에 복합대입 연산자를 계산한다.
예를 들어 a += b 라는 연산자는 a = a + b로 생각하면 쉽다.
< 조건 연산자 >
?와 : 기호를 함께 사용해 표현한다.
조건 연산자는 ? 앞의 조건이 참이면 ? 바로 뒤의 결과값이 되고, 거짓이면 : 바로 뒤의 결과값이 된다.
예를 들어 (a > b) ? a : b;에서 (a > b)가 참이면 a를 선택하고, 거짓이면 b를 선택한다.
< 비트 연산자 >
비트 연산자는 데이터를 비트 단위로 연산한다. a = 10(1010), b = (1100) 이라고 예를 들어보자.
총 32비트지만 편의성을 위해 하위 4비트만 가지고 계산을 해보자.
- 비트별 논리곱 연산자: &연산은 두 비트가 모두 1일때만 1로 계산하기 때문에 a & b는 1000이 되므로 8이다.
- 비트벼 베타적 논리합 연산자: ^연산은 두 비트가 서로 다른 경우에만 1로 계산하기 때문에 a ^ b는 0110이 되므로 6이다.
- 비트별 논리합 연산자: |연산은 두 비트 중에서 하나라도 참이면 1로 계산하기 때문에 a | b는 1110이 되므로 14이다.
- 비트별 부정 연산자: ~연산은 1을 0으로 바꾸고 0을 1로 바꾸고 양수인 경우 비트가 0에서 1로 바뀌므로 음수가 되기 때문에 ~a는 1111....0101이 되므로 -11이다.
- 비트 이동 연산자: <<는 비트를 왼쪽으로 이동시키고, >>는 오른쪽으로 이동시킨다.
a << 1은 a의 비트를 모두 왼쪽으로 한 비트씩 이동시키므로 왼쪽으로 밀려나는 비트는 사라지고 오른쪽의 남는 비트는 0으로 채워진다. 0000...0001_0100이 되는데 왼쪽으로 한 비트씩 이동할 때마다 2가 곱해지므로 20이다.
a >> 1은 a의 비트를 모두 오른쪽으로 한 비트씩 이동시키므로 오른쪽으로 밀려나는 비트는 사라지고 왼쪽의 남는 비트는 부호 비트로 채워진다. 0000...0101이 되는데 오른쪽으로 한 비트씩 이동할 때마다 2로 나눈 몫이 되므로 5이다.
연산자 끝!
'프로그래밍 언어 > C언어' 카테고리의 다른 글
2024.6.28 (0) | 2024.06.28 |
---|---|
2024.6.27 (0) | 2024.06.27 |
2024.6.26 [혼자 공부하는 C언어]4 - 선택문 (0) | 2024.06.26 |
2024.6.24 [혼자 공부하는 C언어]② - 변수와 데이터 입력(수정중) (0) | 2024.06.24 |
2024.6.23 [혼자 공부하는 C언어] - c프로그램의 구조와 데이터 출력방법 (0) | 2024.06.23 |