언어/C

변수와 자료형

빨대도둑 2022. 10. 20. 11:26

「변수」: 프로그램에서 값을 저장하기 위한 것

  • 변수: 한번 값이 저장되었어도 언제든지 다시 다른 값으로 변경이 가능 한 데이터
  • 상수: 값이 한번 정해지면 변경할 필요가 없는 데이터

 

「자료형」: 데이터의 종류

정수형 부동소수점형 문자형
short float char
int double  
long long double  
long    
#include <stdio.h>

int main(void) {
	int x;
	printf("변수 x의       크기: %d\n", sizeof(x));

	printf("char x의       크기: %d\n", sizeof(char));
	printf("int x의        크기: %d\n", sizeof(int));
	printf("short x의      크기: % d\n", sizeof(short));
	printf("long의         크기: %d\n", sizeof(long));
	printf("long long x의  크기: %d\n", sizeof(long long));
	printf("double x의     크기: %d\n", sizeof(double));
	printf("float x의      크기: %d\n", sizeof(float));

}

->
변수 x의       크기: 4
char x의       크기: 1
int x의        크기: 4
short x의      크기:  2
long의         크기: 4
long long x의  크기: 8
double x의     크기: 8
float x의      크기: 4

 

「정수형」

자료형 비트
정수형 short 부호 있는 정수 10비트
int 32비트
long
long 64비트
unsinged short 부호 없는 정수 16비트
unsigned int 32비트
unsigned long
unsigned long long 64비트

> unsigned: 음수가 아닌 값만 나타낸 다는 의미(음수를 제외해서 더 넓은 양수값 표현 가능)

> singed: 음수도 나타낸다는 의미.

- 4개의 정수형 모두 unsigned, signed를 붙일 수 있다. 

「overflow」: 변수가 저장할 수 있는 범위를 넘어서는 수를 저장했을 때 발생

 


「상수」

> 정수 상수: 12, 100과 같이 표기하며, 기본적으로 int형으로 간주한다. int의 범위를 넘어서면 long으로 자동으로 처리한다.

접미사 자료형
u, U unsinged int 123u, 123U
l, L long 123l, 123L
ul, UL unsinged long 132ul, 123UL

> 정수 상수는 10진법뿐만 아니라 8 진법 이나 16진법으로도 표기가 가능하다. 

#include <stdio.h>

int main(void) {
	int x=10;
	int y = 010;
	int z = 0x10;

	printf("x=%d\n", x);
	printf("y=%d\n", y);
	printf("z=%d\n", z);
}

->
x=10
y=8
z=16

 

> 기호상수: 기호에 의하여 상수를 표현한 것. 

다음과 같이 선언한다.

  • #define EXCHANGE_RATE 1200
  • const int EXCHANGE_RATE 1120;

 

「부동 소수점」

> 고정소수점: 32비트를 사용해서 실수를 표현한다면 16비트는 소수점 이상을, 나머지 16비트는 소수점 이하를 표현하는 방식

> 부동소수점: 같은 수의 비트를 상요해서 더 넓은 범위의 실수를 표현. 소수점의 위치를 움직임으로써 한정된 비트로 정밀도를 보다 높게 표현할 수 있다. 따라서 고정소수점 방식에 비해 아주 큰 정수와 아주 작은 소수의 표현이 가능하다. 

-float, double, long double 3가지 자료형을 가진다.

- 실수를 출력하는 기본적인 지정자는 %f이다.

자료형 명칭 크기
float 단일 정밀도 부동소수점 32비트
double 두배 정밀도 부동소수점 64비트
long double
#include <stdio.h>

int main(void) {

	float x = 1.234567890123456789;
	double y = 1.1234567890123456789;

	printf("float의 크기=%d \n", sizeof(float));
	printf("double의 크기=%d \n", sizeof(double));

	printf("x=%30.25f\n", x);
	printf("y=%30.25f\n", y);
}

->
float의 크기=4
double의 크기=8
x=   1.2345678806304931640625000
y=   1.1234567890123456912476740

 

> 부동소수점 상수

실수 지수표기법 의미
123.45 1.2345e2 1.23456 x 10^2
12345.0 1.2345e5 1.2345 x 10^5
0.000023 2.3e-5 2.3 x 10^-5
2,000,000,000 2.0e9 2.0 x 10^9

 

「오버플로우, 언더플로우」

> 오버플로우: 변수에 대입된 수가 너무 커서 변수가 저장할 수 없는 상황. float형 변수는 1 x 10^38 이상의 수를 저장하지 못한다. 

> 언더플로우: 부동 소수점 수가 너무 작아서 표현하기가 힘든 상황

#include <stdio.h>

int main(void) {

	float x = 1.23456e-38;
	float y = 1.23456e-40;
	float z = 1.23456e-46;

	printf("x= %e \n", x);
	printf("y= %e \n", y);
	printf("z= %e \n", z);
}
->
x= 1.234560e-38
y= 1.234558e-40
z= 0.000000e+00

 


「제어문자」

제어문자 이름
\0 널문자
\a 경고
\b 백스페이스
\t 수평탭
\n 줄바꿈
\v 수직탭
\f 폼피드
\r 캐리지 리턴
\" 큰따옴표
\' 작은따옴표
\\ 역슬레시

 

> 정수형으로서의 char

자료형 설명 바이트수 범위
문자형 부호있음 char 문자 및 정수 1 -128~127
부호없음 unsigned char 문자 및 부호없는 정수 1 0~255

 

「정리하면서」

> C언어에 정수 타입이 많은 이유

- 각 타입이 차지하는 메모리 공간의 크기가 다르기 때문이다. 때때로 메모리 공간이 충분하지 않은 경우도 있기 때문에 이렇다. 

> 변수를 선언하지 않고 초기화한다면.

- 변수에 종류에 따라 다르지만 알 수 없는 값이 들어간다. garbage value가 들어가므로 반드시 초기화해야 한다.

 

'언어 > C' 카테고리의 다른 글

배열  (0) 2022.10.27
함수&변수  (0) 2022.10.26
제어문  (0) 2022.10.20
수식과 연산자  (0) 2022.10.20
구성요소  (0) 2022.10.19