C언어 공부 0002
변수와 자료형
- 아래 코드는 변수와 자료형이 모두 나타난 코드이다.
#include <stdio.h>
int main()
{
int a = 1;
float b = 2.3;
char c = 'A';
double sum;
sum = a + b + c;
return 0;
}
변수
- 자료형과 이름으로 이루어진다.
자료형 변수이름;
의 형태가 기본이며, 변수의 선언과 동시에 값을 초기화 하려면자료형 변수이름 = 값;
의 형태를 이용할 수 있다.
- 위의 코드에서 a, b, sum이 변수라고 할 수 있다.
- a와 b는 선언과 동시에 초기화가 되었다.
- sum은
a + b
한 결과를 갖도록하는 구문으로 코드의 마지막에 값이 할당된다.
- 변수의 값은 원하는대로 바꿀 수 있다.
- 변수를 이용하여 프로그램에서 같은 계산을 여러 번 하거나, 중간값을 따로 저장하여 연산에 효율성을 높일 수 있다.
변수의 네이밍 방법
- 카멜 표기법
- 낙타의 혹을 닮았다 하여 붙여진 이름이다.
- 여러 개의 단어가 연결될 때, 첫 단어를 제외한 단어의 첫 문자를 대문자로 표기한다.
- 예 : minsuJoDevelopmentLog
- 파스칼 표기법
- 모든 단어의 첫 문자를 대문자로 표기한다.
- 예 : MinsuJoDevelopmentLog
- 모든 단어의 첫 문자를 대문자로 표기한다.
- 스네이크 표기법
- 구불구불 길게 연결된 모습이 뱀과 닮았다 하여 붙여진 이름이다.
- 여러 개의 단어가 연결될 때, 모든 단어는 소문자를 이용하며 연결 부위에 ‘_‘를 이용한다.
- 예 : minsu_jo_development_log
- 헝가리안 표기법
- 접두어에 자료형을 붙이는 표기법이다.
- 예 : strMinsuJoDevelopmentLog
- 접두어에 자료형을 붙이는 표기법이다.
변수의 네이밍 규칙
- 알파벳, 숫자, 밑줄문자 ‘_‘로 구성한다.
- 첫번째 문자는 반드시 알파벳 또는 밑줄문자로 구성한다.
- 대문자와 소문자를 구별한다.
- 예약어(키워드)와 똑같은 이름은 허용되지 않는다.
- 예약어 : 고유한 의미를 가지고 있는 특별한 단어이다.
- auto, double, break, else, case, enum, char, extern, const, float, continue, for, default, goto, do, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while 등이 있다.
- 예약어 : 고유한 의미를 가지고 있는 특별한 단어이다.
변수의 선언 위치
- 변수는 사용되기 전 선언되어야 한다.
자료형
- 자료형이란 쉽게 말하면 아래와 같다.
- 초등학교에는 8~13세의 아이들이, 중학교에는 14~16세의 아이들이 다닌다.
- 초등학교에는 중학생이, 중학교에는 초등학생이 다닐 수 없다.
- 즉, 자료형마다 저장할 수 있는 값의 종류나 범위가 다르며, 다른 자료형 끼리는 연산이 불가능하다.
- 자료형의 크기는
sizeof(자료형 or 변수 or 값)
을 이용하여 알 수 있다.
자료형의 종류
자료형 | 설명 | 차지하는 저장 공간 (Byte) |
값의 표현 범위 | ||
---|---|---|---|---|---|
정수형 | 부호있음 | short | 표현범위가 작은 정수 | 2 | -215 ~ 215 - 1 |
int | 일반적인 표현범위의 정수 | 4 | -231 ~ 231 - 1 | ||
long | 표현범위가 큰 정수 | 4 or 8 | -231 ~ 231 - 1 | ||
부호없음 | unsigned short | 부호가 없는 short형 정수 | 2 | 0 ~ 216 - 1 | |
unsigned int | 부호가 없는 int형 정수 | 4 | 0 ~ 232 - 1 | ||
unsigned long | 부호가 없는 long형 정수 | 4 or 8 | 0 ~ 232 - 1 | ||
문자형 | 부호있음 | char | 문자 및 정수 | 1 | -27 ~ 27 - 1 |
부호없음 | unsigned char | 문자 및 부호가 없는 char형 정수 | 1 | 0 ~ 28 - 1 | |
부동소수점형 | float | 단일 정밀도 부동소수점 | 4 | 1.2E-38 ~ 3.4E38 | |
double | 두배 정밀도 부동소수점 | 8 | 2.2E-308 ~ 1.8E308 |
언더플로우와 오버플로우
- 언더플로우(Underflow) : 값의 표현 범위보다 큰 값이 들어가서 일어나는 문제
- 발생시 최대 표현 범위보다 큰 만큼의 값이 최소 표현 범위에서 더해진다.
- 오버플로우(Overflow) : 값의 표현 범위보다 작은 값이 들어가서 일어나는 문제
- 발생시 최소 표현 범위보다 작은 만큼의 값이 최대 표현 범위에서 빼진다.
진법
- 자료형에 적합한 값을 저장할 때, 다양한 진법을 활용할 수 있다.
- 진법의 종류
- 2진법 : 0과 1로 이루어짐
- 8진법 : 0~7까지의 수로 이루어짐
- 사용법 :
int a = 010;
과 같이 사용하며, 8진수 10은 10진수로 8이다.
- 사용법 :
- 10진법 : 0~9까지의 수로 이루어짐
- 16진법 : 0~9, A(=10)~F(=15)까지의 수로 이루어짐
- 사용법 :
int a = 0x10;
과 같이 사용하며, 16진수 10은 10진수로 16이다.
- 사용법 :
지수표기법
- 지수를 이용하여 값을 저장할 때 사용한다.
- 다양한 표기 방법
- 1.23456e4 = 12345.6
- 1.23456e-3 = 0.00123456
-
- = 2.0
- .34 = 0.34
- 2e+10 = 210
서로 다른 자료형끼리의 연산
- 자동 형변환
- 데이터의 손실이 적은 쪽으로 일어난다.
- 이 글 가장 위의 코드를 사용자가 직접 수정해가며 느끼는게 좋다.
- 데이터의 손실이 적은 쪽으로 일어난다.
- 강제 형변환
- 사용자가 명시적으로 자료형을 써주어 일어난다.
- 예 : int형 a를 float형으로 바꾸려면
- 사용자가 명시적으로 자료형을 써주어 일어난다.
문자형
- 문자 하나를 저장할 수 있다.
char c = 'A';
와 같이 사용한다.- 한 문자는 작은따옴표를 이용하여 처리한다.
- 여러 문자는 큰따옴표를 이용하여야하며, 이는 ‘문자’가 아닌 ‘문자열’이다.
제어문자
- 아스키코드를 직접 사용하거나, 이스케이프 시퀀스를 사용할 수 있다.
- 자주 사용되는 제어문자
\0
: NULL\t
: tab 문자\n
: 줄바꿈 문자\\
: 따옴표나 역슬래쉬 등의 일반적인 방법으로 출력되지 않는 기호를 출력하기 위해 사용