본문 바로가기

C언어/공부한 것들

[혼자 공부하는 C언어] 11월 16일 연산자

1. 형 변환 연산자

 

형 변환 연산자는 말 그대로 이미 선언한 피연산자의 형태를 변환하는 연산자이다.

#include <stdio.h>	
	
int	main() {
	
	int a = 20, b = 3;
	double res;

	res = ((double)a / (double)b);
	printf("a = %d, b = %d\n", a, b);
	printf("a/b의 결과 : %.1lf\n", res);

	a = (int)res;
	printf("(int) %.1lf의 결과 : %d\n", res, a);
}

 

더보기

a = 20, b = 3

a / b의 결과 : 6.7

(int) 6.7의 결과 : 6

 

애초에 처음부터 a와 b를 double형으로 선언하면 편하겠지만, double형은 저장 공간이 크고 연산 속도가 느리다. 그리고 오차가 발생할 확률이 크기 때문에 int형을 기본적으로 사용하고 실수 연산 결과가 필요할 때만 형 변환을 사용하는 것이 좋다.

 

기억할 것

1. 괄호안에 자료형을 변환을 했다고 해서 출력할 때 정수형으로 불러오면 안된다는 것

2. 괄호안에 변형할 자료형을 적는 것

3. 변경한 값을 저장할 변수로 변경될 자료형으로 선언할 것

 


 

2. size of 연산자

size of 연산자는 피연산자를 하나만 사용할 수 있으며 피 연산자의 크기를 바이트 단위로 계산해서 알려주는 것이다.

대상은 변수, 상수, 수식, 자료형이 된다.

 

#include <stdio.h>	
	
int	main() {
	
	int a = 10;
	double b = 3.4;

	printf("int형 변수의 크기 : %d\n", sizeof(a));
	printf("double형 변수의 크기 : %d\n", sizeof(b));
	printf("정수형 변수의 크기 : %d\n", sizeof(10));
	printf("수식의 결과값의 크기 : %d\n", sizeof(1.5 + 3.4));
	printf("char 자료형의 크기 : %d\n", sizeof(char));
	
	return 0;
}

 

더보기

int형 변수의 크기 : 4
double형 변수의 크기 : 8
정수형 변수의 크기 : 4
수식의 결과값의 크기 : 8
char 자료형의 크기 : 1

 

기억할 것

1. 데이터의 크기를 확인하거나 메모리를 동적으로 할당하는 작업 등에 유용하게 사용된다

2. sizeof를 사용할 대상이 수식이거나 문자형이면 반드시 괄호로 묶어줄 것

 


 

3. 복합대입 연산자

 

복합대입 연산자는 연산결과를 다시 피연산자에게 저장한다. 산술 복합대입 연산자라는 것이 있다.

복합대입 연산식 동일한 연산식 복합대입 연산식 동일한 연산식
a += b a = a + b a &= 2 a = a & 2
a -= b a = a - b a ^= 2 a= a ^ 2
a *= b a = a * b a |= 2 a = a | 2
a /= b a = a / b a <<= 2 a = a << 2
a %= b a = a & b a >>= 2 a = a >> 2

 

#include <stdio.h>	
	
int	main() {
	
	int a = 10, b = 20;
	int res = 2;

	a += 20;
	res *= b + 10;

	printf("a = %d, b = %d\n", a, b);
	printf("res = %d\n", res);

	return 0;

}

 

더보기

a = 30, b = 20
res = 60

 

기억할 것

1. a += 20 이라는 수식은 a = a + 20 이라는 수식이다. 그러면 res *= b + 10은 res = 2 * (b + 10)이다.

res 자리에 2가 들어가는 이유는 위에서 선언을 했고, 6행 이후로는 res는 60이 될 것이다.

 


 

4. 조건 연산자

 

조건 연산자는 유일한 삼항 연산자이다. ?와 :를 사용한다.

첫 번째 피연산자가 참이면 두 번째 피연산자가 결과값이 되고 거짓이면 세 번째 피연산자가 결과값이 된다.

#include <stdio.h>	
	
int	main() {
	
	int a = 10, b = 20, res;

	res = (a > b) ? a : b;

	printf("큰 값 : %d\n", res);

	return 0;

}

 

더보기

큰 값 : 20

4행을 살펴보면 a > b의 연산식이 거짓이기 때문에 res에는 b의 값이 저장되고, 5행의 코드에 res 값을 출력할 때 20이 출력되는 것을 볼 수 있다.

 

기억할 것

1. 참이면 왼쪽, 거짓이면 오른쪽의 값을 가져온다.

2. 조건연산자는 삼항 연산자이다.