3. 자료와 변수
3.1 자료형
자료형
컴퓨터는 숫자(= 데이터)를 다룬다.
컴퓨터가 다룰 수 있는 숫자의 유형이 있다.
강C프로그래밍 3
C 언어에서의 자료형 크기 (byte)
정수형(문자형)
char 1
정수형
short 2
int 4
long 4
long long 8
실수형 (부동소수형)
float 4
double 8
long double 8 / 16
정수형
정수형이란
– 가장 많이 사용되는 자료형
정수형의 종류
자료형 크기(byte) 범위
char 1 -128 ~ 127
short 2 -32,768 ~ 32,767
int 4 -2,147,483,648 ~ 2,147,483,647 long 4 -2,147,483,648 ~ 2,147,483,647 long long 8 약 -922경 ~ 922경 (이하 자리 생략)
정수형
자료형의 선택
– 자료의 범위를 수용할 수 있어야 한다.
– 가능하면 작은 크기의 자료형이 좋다.(메모리 사용량, 계산 속도)
int 형
– 과거의 int 형은 16비트였으나, 현재는 32비트 – 미래에 64비트 이상이 될 수도 있음.
char 형
– 정수형이며, 문자를 저장하는 목적으로 사용할 수 있기에 문자형 으로 볼 수도 있다.
강C프로그래밍 5
실수형
실수
– 소수점 이하가 존재
– 부동소수형 (floating point)
– 정수에 비해 훨씬 큰 숫자, 또는 훨씬 미세한 숫자
자료형 크기(byte) 유효자리 범위
float 4 7 ±10-38 ~ 1038
double 8 15 ±10-308 ~ 10308 long double 8 15 ±10-308 ~ 10308
Visual Studio 에서만 long double 이 8바이트이고, 대부분 12/16 바이트이다.
실수형
강C프로그래밍 7
0
- 1.7 * 10-307 1.7 * 10-307
- 1.7 * 10308 1.7 * 10308
+∞
-∞
0
- 3.4 * 10-37 3.4 * 10-37
- 3.4 * 1038 3.4 * 1038
+∞
-∞
float형
double형
실수형
단점
– 유효자리가 있다. (생각보다 짧다) – 처리 속도가 느리다.
– 오차의 발생 가능성이 많다.
실수의 단점이 치명적인 분야라면
– 해결책을 개발자가 찾아야 한다.
문자형
컴퓨터는 숫자만 다룬다.
– 일정 범위의 숫자에 문자를 할당하여 문자를 처리할 수 있도록 한다.
– char 형은 문자를 저장하기에 적합한 크기의 자료형이다. (int 는?)
ASCII Code
– 0~127까지의 숫자에 문자를 대응시켜 문자 저장용으로 쓴다.
– ASCII Code는 숫자를 문자처럼 해석하는 하나의 방법이다.
대표적인 문자의 ASCII Code
– 0~9 48 ~ 57 – 대문자 A, 소문자 a 65, 97 – 공백문자, 줄바꿈 문자 32, 10
강C프로그래밍 9
문자형
ASCII Code table
unsigned 형
정수형 자료형에 unsigned를 추가하여 범위를 두 배로 사 용
음수를 넣어서는 안 되는 경우 보호장치로 사용 가능
강C프로그래밍 11
자료형 범위
unsigned char 0 ~ 255
unsigned short 0 ~ 65,535 unsigned int 0 ~ 4,294,967,295 unsigned long 0 ~ 4,294,967,295 unsigned long long 0 ~ 1800경
기본 제공되지 않는 자료형은 개발자가 만들어서 사용해야 한다.
C언어 자료형의 이해
무조건 큰 범위의 자료형을 선택한다면?
– 모든 정수는 long long ? – 모든 실수는 long double ?
메모리는 소중하다.
– 정수(int) 1개는 4 바이트를 차지하지만, – 정수(int) 10억 개는 4GB를 차지한다.
짧은 단위일수록 처리 속도가 빠르다.
– char 형 덧셈이 long long형 덧셈보다 훨씬 빠르다.
– 정수형 연산이 실수형 연산보다 훨씬 빠르다.
실수를 정수로 변환하여 연산할 수도 있다.
3.2 변수
변수
프로그램에서 데이터를 저장/사용하기 위한 공간 (주 메모 리)
변수는 이름을 붙여서 사용한다.
변수에는 언제든 새로운 값을 저장할 수 있다.
변수에 값이 저장되면 언제든 그 값을 가져올 수 있다.
변수는 반드시 자료형을 가져야 한다.
변수는 사용하기 전에 반드시 선언되어야 한다.
– 자료형, 변수 이름
변수의 선언
어떤 자료형을 가진 어떤 이름의 변수를 필요한 만큼 선언 선언의 예
– int number;
– int value, score, total;
선언의 위치
– 변수를 사용하기 전
– 현재는 ‘int main ( ) {‘의 다음 줄에 넣는다.
강C프로그래밍 15
자료형 변수명;
자료형 변수명1, 변수명2,…;
number value score
주 메모리
변수에 값 넣기
변수에 값을 넣을 때 = 를 이용한다.
– 오른쪽에 있는 값을 왼쪽의 변수에 넣는다.
score = 90;
변수명 = 값 ;
90
주 메모리
number value score
변수의 이름
변수의 이름에 대한 규칙
– 문자(알파벳), 숫자, _ (underscore, underbar) – 변수 이름의 첫 글자는 무조건 문자 또는 _
– 변수 이름에 대소문자를 구별한다.
한글 변수명도 사용 가능
– C99에서 지원 (어느 나라 언어든 가능)
– 기존 개발자들 사이에서 익숙하지 않아 가급적 쓰지 않기를 권장
변수 이름의 예
– 적절한 예 (number, _number7, My_address)
– 적절하지 않은 예 (7even, num@#, score-score)
강C프로그래밍 17
변수의 이름
좋은 변수 이름
– 이름만으로도 무엇을 저장하는 변수인지 짐작할 수 있어야 한다.
– 변수의 자료형을 알 수 있으면 더 좋다.
• 개발도구가 변수의 자료형을 알려준다.
– 두 개 이상의 단어를 사용해도 좋다.
• totalNum, myAddress 등
좋지 않은 변수 이름
– a, b, c, a1, a2, aaaa, bbbb, kkk
변수의 이름
둘 이상의 단어가 결합된 변수의 작명
– 단어의 시작 문자를 대문자로 : AverageScore, TotalScore – 단어 사이에 _를 붙인다 : average_score, total_score
변수의 자료명
– iTotalScore : 정수형 변수임을 변수명에서 바로 알 수 있다.
– fAverageScore : 실수형 변수
사용할 수 없는 변수명 (keyword, 또는 reserved word)
– C 언어에서 별도의 목적으로 사용하도록 예약된 단어들
• auto, break, case, char, const, continue, default, do, double
• else, enum, extern, float, for, goto, if, return, short, sighed,
• sizeof, static, struct, switch, typedef, union, unsigned, void, while
강C프로그래밍 19
변수 초기화
변수 선언과 동시에 값을 넣어준다.
여러 변수의 선언과 초기화 예
– int number = 20, value = 30, score = 50;
int value;
value = 10;
int value = 10;
변수를 선언하고 초기화하지 않으면 쓰레기값이 들어있다.
모든 변수를 초기화해야 하는 것은 아니다.
변수의 초기화
다음은 정상적인 경우이다.
다음은 경고 또는 에러가 나온다.
– name 변수가 초기화되지 않아 쓰레기값이 있는데 그 쓰레기를 value에 넣으려 하고 있다.
강C프로그래밍 21
int value, name ; // value 변수는 초기화하지 않아도 된 다.
// 쓰레기값이 들어있지만, name = 50;
value = name; // value 변수의 쓰레기값을 쓰기 전에 // 다른 값으로 채우기 때문이다.
int value, name;
value = name;
sizeof 연산자
자료형의 크기를 알려주는 연산자
시스템마다 자료형의 크기가 다를 수 있다. 이 때 sizeof 연산자로 확인하는 것이 좋다.
int score;
score = 99;
printf( “%d\n”, sizeof (int)); // int 형의 크기를 출력
printf( “%d\n”, sizeof score); // score 변수의 크기를 출력
3.3 C 프로그램에서의 숫자
상수
값을 나타내는 자료 예
– 문자형 상수 ‘A’
– 정수형 상수 10, 384 – 실수형 상수 5.321
score = 10;
상수
이름 상수 (named constant)
변수처럼 식별자에 값을 부여한다.
– 값을 바꿀 수 없고, 프로그램 실행 내내 지정한 값 만을 가질 수 있다.
– 사용법
이름 상수를 쓰는 이유
– 프로그램의 가독성 향상
– 실수로 값을 변경하는 것을 방지
바람직한 상수명
– 대문자로 사용한다. : 변수와 달리 상수라는 것을 표시
강C프로그래밍 25
const
int MAX_SCORE = 100 ;…
score = MAX_SCORE;
진수 표기법
C 프로그램에서 사용 가능한 진수
– 8, 10, 16진수
– 2진수 상수는 프로그램에서 직접 사용하지 않는다.
2, 8, 16진수의 관계
– 2진수 3자리를 묶으면 8진수 – 2진수 4자리를 묶으면 16진수
0100110010100110 4 C A 6
2진수 16진수
110010100110 6 2 4 6
2진수 8진수
진수 표기법
C 프로그램에서 진수의 표현
– 8진수 : 숫자 앞에 0을 붙인다.
– 16진수 : 숫자 앞에 0x를 붙인다.
– 사용 예:
value = 010; // 8진수 10, 즉, 8을 value에 넣는다.
Score = 0x10; // 16진수 10, 즉 16을 score에 넣는다.
강C프로그래밍 27
프로그램에서 2진수를 이용하여 입력하는 방법은 없다.
8진수 또는 16진수로 변환하여 입력해야 한다.
지수형 자료의 입력
수 입력의 한계
– 10^100 을 입력하기 위해 다음과 같이 할 수 없다. (에러) double fvalue =
10000000000000000000000000000000000000000…………
지수 형태의 입력이 가능하다.
– fvalue = 1.0e100;
오버플로/언더플로
강C프로그래밍 29
표현 범위를 벗어날 경우
– char 형에서 -128보다 작거나(언더플로) 127보다 클 때(오버플 로)
오버플로/언더플로
– 따로 에러로 간주하지 않으나, 예상치 못한 값이 들어있다.
– 발생하지 않도록 하는 것이 바람직하다.
C 언어에서의 자료형 크기 (byte) 표현 범위
정수형
char 1 -128~127
short 2 -32768 - 32767
int 4 -2,147,483,648 ~ 2,147,483,647 long 4 -2,147,483,648 ~ 2,147,483,647 long long 8 약 -922경 ~ 922경 (이하 자리 생략)
수와 접미사
실수형 상수도 float 형과 double 형으로 구분된다.
double 상수를 float형 변수에 넣으려 하면 자료 손실 가 능성으로 경고가 나온다
상수를 특정한 자료형으로 정의할 때 접미사를 사용한다.
– a = 0.1F; // 0.1을 float 형으로 간주하라.
접미사의 종류
– U, L, UL, LL, ULL(이상 정수형 접미사), F, L (이상 실수형
float a, b;
a = 0.1; // 경고가 나온다 b = 0.5; // 정상이다.
3.4 컴퓨터에서 수를 표현하는 방
법
정수의 표현
오버플로/언더플로의 결과를 이 표에서 찾아보자.
2의 보수로 표현하는 음의 정수 양의 정수
-2,147,483,648 -2,147,483,647
… -3 -2 -1 0
1000….….0000 1000……..0001
…
1111……..1101 1111……..1110 1111……..1111 0000……..0000
2,147,483,647 2,147,483,646
… 3 2 1 0
0111..……1111 0111……..1110
…
0000……..0011 0000……..0010 0000……..0001 0000……..0000
실수의 표현
± 𝟏. 𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇𝒇 ∗ 𝟐 𝒆𝒆𝒆𝒆𝒆𝒆𝒆𝒆−𝟏𝟐𝟕
long double형은 시스템마다 구성이 다르다.
강C프로그래밍 33
0 e e e e e e e e f f f f f f f f f f f f f f f f f f f f f f f
1 bit 8 bit 23 bit
지수 가수