1. 나눗셈 연산자
정수형 / 정수형 == 정수형(소수점 이하의 값은 버려진다.)
#include <stdio.h>
int main() {
int a = 10;
int b = 3;
int result = a / b; // 정수끼리 나누기, 소수점 이하 값은 버려짐
printf("정수형 나눗셈: %d\n", result); // 출력: 3
return 0;
}
실수형 / 실수형 == 실수형
#include <stdio.h>
int main() {
float a = 10.0;
float b = 3.0;
float result = a / b; // 실수끼리 나누기
printf("실수형 나눗셈: %.2f\n", result); // 출력: 3.33
return 0;
}
2. 증감 연산자
전위 증감 연산자와 후위 증감 연산자
증감 연산자 | 차이점 | x가 5일 때의 식 | x의 값 | y의 값 |
++x | 수식의 값은 증가된 x값이다. | y = ++x | 6 | 6 |
x++ | 수식의 값은 증가되지 않은 원래의 x값이다. | y = x++ | 6 | 5 |
--x | 수식의 값은 감소된 x값이다. | y = --x | 4 | 4 |
x-- | 수식의 값은 감소되지 않은 원래의 x값이다. | y = x-- | 4 | 5 |
3. 대입 연산자
변수 = 수식
x = 10;
대입 연산자를 연속해서 사용될 수 있다. 아래와 같이 연속되어 3을 대입되는 문장을 작성할 수 있는데, 이 문장의 실행순서는 아래와 같다.
x = y = z = 3;
1. z = 3
2. y = z(z는 3인 상황)
3. x = y(y는 3인 상황)
4. 복합 대입 연산자
복합 대입 연산자 | 의미 |
x += y | x = x + y |
x -= y | x = x - y |
x *= y | x = x * y |
x /= y | x = x / y |
x %= y | x = x % y |
Quiz) X *= Y + 1과 X %= X + Y를 풀어서 작성하면?
X = X * (Y + 1)
X = X % (X + Y)
5. 관계 연산자
: 두 개의 피연산자를 비교하는데 사용된다.
연산 | 의미 |
x == y | x와 y가 같은가? |
x != y | x와 y가 다른가? |
x > y | x가 y보다 큰가? |
x < y | x가 y보다 작은가? |
x >= y | x가 y보다 크거나 같은가? |
x <= y | x가 y보다 작거나 같은가? |
x = y, x == y는 다른 것
: 왼쪽은 대입 연산자를 사용한 것이고, 오른쪽은 관계 연산자를 사용한것이다.
Quiz) (3 >= 2) + 5의 값은?
: (3 >= 2)는 참으로 1으로, 1 + 5는 6이다.
6. 비트 연산자(굉장히 중요)
연산자 | 연산자의 의미 | 설명 |
& | 비트 AND | 두개의 피연산자의 해당 비트가 모두 1이면 1, 아니면 0 |
| | 비트 OR | 두개의 피연산자의 해당 비트가 하나만 1이면 1, 아니면 0 |
^ | 비트 XOR | 두개의 피연산자의 해당 비트의 값이 같으면 0, 아니면 1 |
<< | 비트 << | 지정된 개수만큼 모든 비트를 왼쪽으로 이동한다. (값은 2배가 된다.) |
>> | 비트 >> | 지정된 개수만큼 모든 비트를 오른쪽으로 이동한다.(값은 1/2배가 된다.) |
~ | 비트 NOT | 0은 1로 만들고 1은 0으로 만든다. |
7. 연산자 우선 순위(굉장히 중요)
- 콤마 < 대입 < 논리 < 관계 < 산술 < 단항
- 괄호 연산자는 가장 우선순위가 높다.
- 모든 단항 연산자들은 이항 연산자들보다 우선순위가 높다.
- 콤마 연산자를 제외하고는 대입 연산자가 가장 우선순위가 낮다.
8. 결합 규칙
[산술 연산자(좌에서 우로 결합)]
[대입 연산자(우에서 좌로 결합)]
9. 형변환
자동적인 형변환
: 컴파일러에 의하여 자동으로 수행되는 것
[올림 변환]
- int에서 long으로 변환
- int에서 float 또는 double로 변환
int a = 10;
double b = a; // 'int'를 'double'로 변환 (올림 변환)
[내림 변환]
- double에서 int로 변환
- long에서 short로 변환
double a = 9.7;
int b = a; // 'double'을 'int'로 변환 (내림 변환)
[서로 다른 자료형이 홉합하여 사용되는 경우의 자동 형변환]
int i = 10;
double d =1.2345
y = i + d; // 자동적인 형변환으로 인해 i는 10.0으로 변환되어 y는 10.234가 된다.
명시적인 형변환
: 프로그래머가 명시적으로 데이터의 형을 변환하는 것
주의할 점은 변수의 타입이 변경되는 것이 아니고 변수가 가지고 있는 데이터의 타입만 변경된다는 점이다.
c언어는 정적 타입 언어이기 때문에, 타입이 한번 정해지면 그 변수의 타입은 변경이 불가능하다.
int x = 1;
(int)1.2345
(double)x
(long)(x+1) //2L이지만, x의 타입은 그대로 int타입이다!!!