데이터형 Data Types LOGO
함수 몸체의 기본 구조
함수의 실행부인 몸체를 구성하는 개념들에 대해서 살펴보자
C언어의 기본 구조 설 명
1: #include <stdio.h>
2: main( )
3: { // 함수의 시작 . 4: STEP 1: 변수들의 선언 . 5:
6: STEP 2: 변수에 데이터 대입 . 7:
8: STEP 3: 수식 연산 및 제어문 . 9:
STEP 1: 변수 또는 초기 값들을 선언한다 . [예 ] int a; 또는 int a=100;
STEP 2: 변수에 데이터를 대입한다 . [예 ] C=10; 또는 scanf("%d", &C);
STEP 3: 제어문 및 연산 처리를 행한다 . [예 ] D=A+B; 및 if, for 등의 제어문 사용 .
데이터형 Data Types LOGO
변수
Variables변수란 주어진 문제의 필요에 의해서 주기억 장치
main memory unit인 램
Random Access Memory에 해당 데이터를 저장하는 공간을 뜻한다
그 저장 공간의 변수들은 제각기 프로그래머에 의해서 임의적으로 생성한 이름 을 가지게 된다
변수에 저장된 데이터는 또 다른 데이터로 바꿀 수 있다
데이터형 Data Types LOGO
변수를 선언한다는 것은 데이터의 저장 공간을 확보한다는 것
C언어의 기본구조인 함수의 몸체 내에서 제일 먼저 선언되어 사용된다
변수의 선언 [ 함수 몸체 내의 STEP 1 단계 구성 ]
기본 자료형 자료형 이름 설 명
정수Integer int 메모리에 할당되는 데이터는 10 진수 정수형을
의미한다 . [4byte 크기의 저장 공간사용 ]
실수Floating Point
float 메모리에 할당되는 데이터는 소수점의 실수형을
의미한다 . [4byte 크기의 저장 공간사용 ]
데이터형 Data Types LOGO
변수의 선언 [ 함수 몸체 내의 STEP 1 단계 구성 ]
▮
변수선언 시에기본 자료형의 개념▮
기본 자료형 자료형 이름 설 명
문자Character char
메모리에 할당되는 데이터는 문자형을 의미한다 .
[1byte크기의 저장 공간사용 ]
문자열String
C언어는 문자열 자료형이 따로 없다 . 그러나 char 의 자료형을 이용하여 배열 및 포인터로 문자열을 표현할 수 있다 . 이때 문자열을 표현하기 위하여 아래 예와 같이 큰따옴표인 (" ")를 사용한다 .
[예시 ]
char MunJang[ ]="Munjayeol"; // 배열의 예 char *MunJang="Munjayeol"; // 포인터의 예
데이터형 Data Types LOGO
변수의 선언 [ 함수 몸체 내의 STEP 1 단계 구성 ]
▮
변수선언 시에기본 자료형의 개념▮
기본 자료형 자료형 이름 설 명
문자Character char
메모리에 할당되는 데이터는 문자형을 의미한다 .
[1byte크기의 저장 공간사용 ]
문자열String
C언어는 문자열 자료형이 따로 없다 . 그러나 char 의 자료형을 이용하여 배열 및 포인터로 문자열을 표현할 수 있다 . 이때 문자열을 표현하기 위하여 아래 예와 같이 큰따옴표인 (" ")를 사용한다 .
[예시 ]
char MunJang[ ]="Munjayeol"; // 배열의 예 char *MunJang="Munjayeol"; // 포인터의 예
데이터형 Data Types LOGO
변수의 선언 [ 함수 몸체 내의 STEP 1 단계 구성 ]
❏ 변수의 선언 형식
자료형 ︹ 변수 이름;
자료형 ︹ 변수 이름 1,변수 이름 2,•••;
- 자료형의 종류에는 int, float, char, long, double 등이 있다 . - 변수를 선언할 때는 자료형과 변수 이름 이 필요하다 .
- 변수의 선언이 끝나는 맨 뒤에 세미콜론 (;) 을 반드시 기입한다 . - 동일한 자료형에 여러 개 변수 이름이 기 입되는 경우는 변수의 이름
과 이름 사이에 반드시 콤마 (,) 를 사용하여 변수 이름을 구분한다 . - 변수의 이름은 가급적 그 역할에 맞는 의 미가 있는 이름을 사용하는 것이 바람직하 다 .
- 변수 이름은 임의적으로 생성이 가능하나 , 다음과 같이 몇 가지 규 칙
이 따른다 .
알파벳의 대문자와 소문자를 구별한다 . 키워드는 변수 이름으로 사용불가하다 . 자료형 종류에 따른 변수 선언 [STEP 1 단계 ]
정 수 short, int, long, char int age;
실 수 float, double, long
float Total_1;
데이터형 Data Types LOGO
변수의 초기화 [ 함수 몸체 내의 STEP 2 단계 구성 ]
함수 내의 STEP 1단계 구성인 변수의 선언이 끝나면 그 다음 STEP 2 단계를 통해서 선언된 변수에 데이터를 초기 값으로 대입하든지 아니면 미리 변수를 초기화하여 사용
scanf
함수를 이용하여 선언된 변수에 데이터 값을 대입할 수도 있다선언된 변수에 데이터 값을 대입하는 방법을 3가지의 유형으로 분류하여 살펴보도록 하자
❏ 제 1 유형 : 초기 값을 대입하는 형태
예 시 설 명
int number; // STEP 1단계
- STEP 1단계로 변수 선언부이다 . 이때 변 수 number 는 쓰레기 [ 불필 요한 ] 값을 갖 게 된다 . [ 아래 원시 소스코드 참조 ]
LOGO
❏ 제 1 유형 : 초기 값을 대입하는 형태
LOGO
초기값의 대입이 없는 경우의 흐름도 초기값의 대입이 있는 경우의 흐름도
데이터형 Data Types
데이터형 Data Types LOGO
❏ 제 2 유형 : 변수의 초기화 형태
데이터형 Data Types LOGO
데이터형 Data Types LOGO
❏ 제 3 유형 : 키보드에 의한 값 대입 형태
데이터형 Data Types LOGO
데이터형 Data Types LOGO
상수
Constant상수는 프로그램 실행 중에 데이터 값이 변하지 않는 고정된 값 또는 요소를 의미 그 종류로는 매크로 상수 , const 상수 , 그리고 리터럴 상수로 나누어 볼 수 있다
매크로 상수
매크로 상수는 전처리기인 #define문으로 정의되는 상수를 뜻한다
데이터형 Data Types LOGO
상수
Constant상수는 프로그램 실행 중에 데이터 값이 변하지 않는 고정된 값 또는 요소를 의미 그 종류로는 매크로 상수 , const 상수 , 그리고 리터럴 상수로 나누어 볼 수 있다
매크로 상수
매크로 상수는 전처리기인 #define문으로 정의되는 상수를 뜻한다
데이터형 Data Types LOGO
❏
매크로 상수의 형식#define ︹ 매크로 이름 ︹ 값
매크로 정의 예시 설 명
[상수 값이 정수 ]
#define MAX 256 [상수 값이 실수 ]
#define PI 3.14159 [상수 값이 문자 ]
#define MUNJA 'K' [상수 값이 문자열 ]
#define JANGMUN "Global"
- 매크로 이름은 변수가 아니라 상수이다 . - 또한 매크로 이름 뒤에 오는 값들도 상 수이다 . - #define문은 전처리기에 의해서 처리된 다 .
- #define문은 int, float, char 등의 자 료형을 사용하지 않는다 . - 매크로 상수의 형식에 의해 정의된 #define 문의 맨 뒤에는 세미 콜론 (;) 을 붙이지 않는다.
- 매크로 이름은 알파벳의 소문자 또는 대 문자를 사용할 수 있으나 주로 대문자로 사용하여 매크로 상수임을 강조하기도 한다 .
데이터형 Data Types LOGO
매크로 상수의 정수 예제
원시 소스코드 실행 결과
1: #include <stdio.h>
2: #define SIZE_X 100 // 정수 치환 3: #define SIZE_Y 200 // 정수 치환 4:
5: mian() // main함수 6: {
7: int y; // STEP1단계 : 변수 선언 8:
9: y=SIZE_Y; // 매크로 상수 값 200 을 10: // 변수 y 에 대입
11: printf("X축의 크기는 : %d∖n", SIZE_X);
12: printf("Y축의 크기는 : %d∖n", y);
13:
14: }
데이터형 Data Types LOGO
설 명
- 2행과 3 행에 SIZE_X 와 SIZE_Y 라는 이름의 매크로 상수이고 이것은 각각 100 과 200 의 상수 값으로 치환한다는 의 미이다 .
- 7행은 y 라는 변수 이름 앞에 자료형이 int 형이 붙어 있으므로 이것은 변수 y 에 정수 형 데이터를 보관하겠다는 뜻이 된 다 .
- 9행은 변수 y 에 SIZE_Y 를 대입한다는 뜻으로 SIZE_Y 는 매크로 상수의 정의에 의하여 상수 값 200 으로 치환하고 있 으므로 최종적으로 y=200; 으로 해석된다 .
- 11행의 경우에 있어서 SiZE_X 는 매크로 상수에 의해서 치환된 상수 값 100 을 모니터 상에 출력하게 된다 . -12행은 9 행에 의해서 변수 y 에 대입된 200 의 값을 호출하여 모니터에 출력하게 된다 .
매크로 상수에 의해 정의된 SIZE_X 와 SIZE_Y 의 매크로 이름은 상수로서 main 함수 내에 따로 선언할 필요가 없다는 것 에 주의하도록 하자 .
데이터형 Data Types LOGO
매크로 상수의 실수 예제
원시 소스코드 실행 결과
1: #include <stdio.h>
2: #define X 3.5 // 실수 치환 3: #define Y 4.7 // 실수 치환 4:
5: mian() // main함수 6: {
7: double A; // STEP1단계 : 변수 선언 8:
9: A=X+Y; // 매크로 상수 X 와 Y 의 총합 10:
11: printf("X축의 크기는 : %lf∖n", X);
12: printf("X+Y의 총 합은 : %lf∖n", A);
13:
14: }
데이터형 Data Types LOGO
설 명
- 2행과 3 행에 X 와 Y 라는 이름의 매크로 상수이고 이것은 각각 3.5 와 4.7 의 상수 값으 로 치환한다는 의미이다 . - 7행은 A 라는 변수 이름 앞에 자료형이 double 형이 붙어 있으므로 이것은 변수 A 에 실 수형 데이터를 보관하겠다는 뜻 이 된다 .
- 9행은 매크로 상수인 X 와 Y 가 치환된 값 3.5 와 4.7 을 더한 총 합의 값을 변수 A 에 대 입한다는 뜻이다 . - 11행은 매크로 상수 X 가 치환된 3.5 의 값을 호출하여 모니터에 출력하게 된다 .
- 12행은 변수 A 에 대입된 값을 호출하여 그 값을 모니터에 출력한다 .
1999년 이전에는 변수의 자료형이 float 또는 double 로 선언되어 있는 경우에 출력 지정 문자는 "%f" 만을 사용하였으나 , C99규범이 출간되면서 출력 지정 문자로 "%lf" 가 추가되었다 . 일반적으로 자료형이 float 으로 선언된 경우의 출력 지정 문자 "%f", double 로 선언된 경우의 출력 지정 문자는 "%lf" 로 사용한다 . 그러나 실수형의 경우 에 출력 지정 문자는
"%f"로 사용하여도 문제는 없다 .
데이터형 Data Types LOGO
매크로 상수의 문자 예제
원시 소스코드 실행 결과
1: #include <stdio.h>
2: #define MUNJA 'K' // 한 문자 치환 3:
4: mian() // main함수 5: {
6:
7: printf("%c-pop star∖n", MUNJA);
8:
9: }
데이터형 Data Types LOGO
설 명
- 2행에 MUNJA 의 이름은 매크로 상수이고 이것은 한 문자 K 의 상수 값으로 치환한다는 의미이다 . -7행은 매크로 상수인 MUNJA 가 치환된 문자 값 K 를 호출하여 모니터에 출력하게 된다 .
자료형이 char 로 선언된 경우에 있어서 한 문자의 출력 지정 문자열은 "%c" 이며 , 매크로 상수 값 또는 변수의 초기 값으로 선언할 경우에 위의 원시 소스코드의 2 행 과 같이 작은 따옴표Single quotes인 (' ')사이에 한 문자를 입력하여 선 언하게 된다 .
데이터형 Data Types LOGO
매크로 상수의 문자열 예제
원시 소스코드 실행 결과
1: #include <stdio.h>
2: #define MUNJA "K-pop star“ // 문자열 3: // 치환
4: mian() // main함수 5: {
6:
7: printf("%s∖n", MUNJA);
8:
9: }
데이터형 Data Types LOGO
설 명
- 2행에 MUNJA 의 이름은 매크로 상수이고 이것은 K-pop star 의 문자열 상수 값으로 치 환한다는 의미이다 . - 7행은 매크로 상수인 MUNJA 가 치환된 문자 값 K-pop star 를 호출하여 모니터에 출력 하게 된다 .
문자열의 출력 지정 문자열은 "%s" 이며 , 매크로 상수 값 또는 변수의 초기 값으로 선언할 경우에 위의 원시 소스코드 의 2 행과 같이 큰 따옴표Double quotes인 (" ")사이에 문자열을 입력하여 선언하게 된다 .
데이터형 Data Types LOGO
const 는 변수를 상수로 만드는 역할을 한다
const 와 함께 사용되는 변수의 선언은 명확한 자료형을 지정해야 하며 , 데이터는 반드시 초기화하여 한 행에 선언하여야 한다
const 에 의해서 지정된 데이터는 변경할 수 없으며 어떤 함수 내에서 const 로 선언된 경우는 그 함수 안에서만 사용이 가능하다
const 변수
❏const형식
const ︹ 자료형 ︹ 변수명 = 초기값 ;
올바른 예 잘못된 예
데이터형 Data Types LOGO
const형식이 올바르게 정의된 예제
원시 소스코드 실행 결과
1: #include <stdio.h>
2:
3: mian() // main함수 4: {
5: const int value = 100;
6:
7: printf("%d∖n", value);
8:
9: }
설 명
- 5행에서는 const int 형의 변수 value 를 선언하고 자료형이 int 이므로 정수 100 의 값 으로 초기화하였
데이터형 Data Types LOGO
const형식이 잘못 정의된 예제
원시 소스코드 1 원시 소스코드 2
1: #include <stdio.h>
1: #include <stdio.h>
2:
3: mian() 4: {
5: const int value;
6:
7: value=500;
8:
9: printf("%d n", value);∖ 10:11: }
2:
3: mian() 4: {
5: const int value = 100;
6:
7: value=500;
8:
9: printf("%d n", value);∖ 10:
11: }
설 명 설 명
- 5행은 const int 형의 변수 value 를 선언 하고 초기화가 - 5행에서 const int 형의 변수인 value 를 선언할 때 데이터
데이터형 Data Types LOGO
특정 메모리 공간에 값이 할당되어 있지만 그 할당된 메모리 공간에 이름이 없는 상수 를 가리켜 리터럴 상수라고 한다
리터럴
literal상수
메모리 공간 이름 ?
값의 할당 300
메모리 공간에는 이름이 선언되지 않고 단지 정수 값 300 이 메모리 공간에 할당되어 있다 . 여기서 정수 값 300 을 리터럴 상수 또는 단 순히 상수 라고 한다
데이터형 Data Types LOGO
자료형이 포함되어 있는 경우의 예제
1: /* 자료형이 포함된 경우의 상수 */
2: #include <stdio.h>
3:
4: main( ) 5: {
6: int a=500; // 정수형 상수 7: float b=25.4f; // 실수형 상수 8: double c=45.7; // 실수형 상수 9: char d='A'; // 문자형 상수
10: char *e="Munjayeol"; // 문자열형 상수 11: ••••••••
12: ••••••••
13: }
데이터형 Data Types LOGO
설 명
-앞의 원시 소스코드에서 변수는 a, b, c, d, *e 의 총 5 개이며 , 상수도 500, 25.4, 45.7, A, Munjayeol로 총 5 개가 된다 .
-7행의 경우에 있어서 실수형 상수에 25.4f 로 f 를 붙인 이유는 할당되는 메모리 크기를 4 바이트byte만 가지고도 충분히 표현 가능하다는 의미이다 . 이때 주의할 사항은 만일 f를 제외하고 float b=25.4 로 정의하게 되면 컴퓨터는 자료형 double 의 메모리 크 기인 8 바이트로 처리하여 메모리 공간이 낭비되는 결과를 가져올 수 있다 .
-8행은 자료형이 double 로서 메모리 크기를 8 바이트를 이용하여 표현한다는 의미이다 .
- 9행과 10 행의 문자와 문자열은 나중에 살펴보기로 하겠다 .
데이터형 Data Types LOGO
기본 자료형
Basic data types변수에 대입 /저장되는 데이터 값의 종류를 자료형이라고 한다
자료형은 정수형 , 실수형 , 그리고 문자형으로 그 유형들을 분류할 수 있으며 , 각각의 자료형에 맞는 저장 공간의 크기가 정해져 있다
분류
형태 자료형 크기
[byte] 표현 범위
정수
signed short (int) 2 -215[-32,768] ~ (215-1)[32,767]
unsigned short (int) 2 0 ~ (216-1)[65,535]
signed int 4 -231[-2,147,483,648] ~ (232-1)[2,147,483,647]
unsigned int 4 0 ~ (232-1)[4,294,967,295]
signed long (int) 4 -231[-2,147,483,648] ~ (232-1)[2,147,483,647]
unsigned long (int) 4 0 ~ (232-1)[4,294,967,295]
데이터형 Data Types LOGO
signed
는 생략하여 사용 가능하며 양수와 음수의 모든 값 을 나타내는 대신에 양수의표현 범위는 상대적으로 줄어든다
예를 들면 , signed int sum; 은 signed 를 생략하고 int sum;으로 선언가능하며 서로 같은 표현 이 된다
반면에
unsigned
는 생략이 불가능하며 양수만을 표현하므로 상대적으로 양수의 표현범위가 늘어나게된다
예를 들면 , unsigned int sum; 은 unsigned 의 생략이 불가능하기 때문에 int sum;으로 선언이 절대 불가능하다
만약 unsigned int sum;에서 unsigned 를 생략하게 되면 int sum; 이 되므로 signed 가 생략된 의미로 양수와 음수의 모든 값으로 표현하겠다는 뜻이 된다
또한 변수에 대입된 수가 너무 커서 해당 자료형의 표현 범위를 초과하게 되는 것을 오버플로overflow, 그와 반대인 경우를 언더플로underflow 라고 한다
데이터형 Data Types LOGO
정수형 표현
정수형은 short, int, 그리고 long으로 3가지 자료형으로 나누어 사용
3가지 자료형으로 나누어 사용되는 이유는 처리해야 할 데이터 값마다 그 크기에 따른
표현 범위가 다르기 때문이다
정수 자료형에 따른 유형을 살펴보기 전에 컴퓨터 의 운영체제에 따른 32bit/64bit 의 경우에 대해서 자료형 크기 를 다음과 같이 정리한다
정수 자료형 32bit 운영체제 64bit 운영체제
short 2byte[16bit] 2byte[16bit]
int 4byte[32bit] 4byte[32bit]
데이터형 Data Types LOGO
❏ short
short는 정수를 표현하기 위한 데이터형으로 크기는 2byte 의 메모리 공간을 할당받는다 short는 unsigned short (int) 로 선언되어도 65,535 이상의 정수 표현은 불가능하다
그렇기 때문에 65,535보다 큰 수를 사용할 경우는 int 또는 long 으로 선언하여 사용하여 야 한다 정수 자료형 short 로 선언된 예제
원시 소스코드 실행 결과
1: #include <stdio.h>
2:
3: mian() 4: {
5: short int max = 32767;
6: unsigned short int Jeongsu = -250;
7:
8: printf("%d∖n", max);
9: printf("%d∖n", Jeongsu);
10:
11: }
데이터형 Data Types LOGO
설 명
5행 : short int 형은 데이터의 표현 범위가 -32,768 ~ 32,767 이다 . 변수 max 에 대입 된 값
32,767은 short 의 표현 범위를 초과하지 않는다 .
6행 : unsigned short int 형은 데이터의 표현 범위가 0 ~ 65,535 이며 음수를 사용할 수 없다 .
그러나 Jeongsu 에 대입된 값은 -250 로 음수이기 때문에 정상적인 데이터로 사용할 수 없다 .
8행 : 변수 max 에 대입된 값 32,767 를 출력한다 .
9행 : 변수 Jeongsu 에 대입된 값인 -250 은 unsigned short 형의 표현 범위가 아니므로 65,286
라는 부정확한 값이 출력되게 되는데 이 값을 쓰레기 값이라고 표현한다 .
데이터형 Data Types LOGO
❏ signed short
signed short는 2byte 의 메모리 공간인 -32,768 ~ 32,767 즉 , -215 ~ 215-1까지를 할당받아 정수를 저장할 수 있는 데이터형으로서 정수를 이진수로 변환하여 메모리에 저장하게 된다
메모리 표현은 다음과 같이 표현한다
위 그림에서 최상위 비트인 부호 비트는 양수 (+)이면 0, 음수 (-)이면 1 로 저장된다
이때 이진수의 데이터는하위Most Significant Bit 바이트에서상위Least Significant Bit 바이트로 저장된다
예를 들어 , 10진수 35 를 이진수로 변환하면 00000000 00100011 이 되며 이것을 메모리 표현하면 다음과 같다
데이터형 Data Types LOGO
예제
-35 인 음의 정수 라면 부호 비트는 어떻게 바뀌는 지에 대해 살펴보도록 하자
STEP
데이터 값이 -35 와 같이 음의 정수인 경우에 있어서는 먼저 양의 정수 35 를 이진수로 변환시킨다
STEP
35의 이진수 표현을 아래와 같이
1
의 보수로 바꾸어 준다 .이때 1 의 보수로 바 꾼다는 개념은 아래와 같이 0 을 1 로 , 1 은 0 으로 바꾼다는 것을 의미한다
데이터형 Data Types LOGO
예제
-35 인 음의 정수 라면 부호 비트는 어떻게 바뀌는 지에 대해 살펴보도록 하자
STEP
마지막으로
2
의 보수를 행한다 . 여기서 2 의 보수란 다음과 같이 1 의 보수로 표현된 결과 에 1 을 더해서 얻어지는 이진수의 표현이다 .[2
의 보수로 표현된 결과 ]2의 보수에 의해 표현된 결과에서 알 수 있듯이 최상위 비트인 부호 비트가 1 이므로 음수라
데이터형 Data Types LOGO
예제
-35 인 음의 정수 라면 부호 비트는 어떻게 바뀌는 지에 대해 살펴보도록 하자
반면에 unsigned short 는 최상위 비트인 부호 비트에도 실제 데이터 값으로 2byte 공간인 총 16개의 bit 를 모두 사용하겠다는 의미
unsigned char형의 메모리 표현은 :
signed char
형의 메모리 표현을 정리해 보면 총 16 개의 bit 중에 최상위 비트는 부호 비트로 사용되고 실제 데이터 값의 사용 공간은 15개의 bit 만 사용하게 된다데이터형 Data Types LOGO
❏ int
int는 정수를 표현하기 위한 데이터형으로 크기는 4byte 의 메모리 공간을 할당받는다
int는 unsigned int 로 선언 가능하며 4,294,967,295 까지의 양의 정수를 저장할 수 있는 데이 터형
컴퓨터의 운영체제에 따라서 자료형 int 는 2byte 인 경우도 있다
정수 자료형 int 로 선언된 예제
원시 소스코드 실행 결과
1: #include <stdio.h>
2:
3: mian() 4: {
5: (signed) int max = -32767;
6: unsigned int Jeongsu = -250;
7:
8: printf("%d∖n", max);
9: printf("%d∖n", Jeongsu);
10:
11: }
데이터형 Data Types LOGO
설 명
5행 : signed int 형에서
signed 를 생략하고 int 형만 선언하여도 같은 표현이며 , 데이터 의 표현
범위는 -2,147,483,648~2,147,483,647 이다 . 따라서 변수 max 에 대입된 값 -32,767 은 int 에서 사용
이 가능한 데이터 값이 된다 .
6행 : unsigned int 형은 데이터의 표현 범위가 0 ~ 4,294,967,295 이지만 음수를 사용할 수 없 다 .
그러나 Jeongsu 에 대입된 값은 -250 로 음수이기 때문에 원하지 않는 쓰레기 값이 모니터에 출력 되게 된다 .
데이터형 Data Types LOGO
❏ signed int
signed int
형의 메모리 표현은 총 32 개의 bit 중에 최상위 비트는 부호 비트로 사용되고 실제 데이터 값의 사용 공간은 31개의 bit 만 사용부호 비트는 short 와 마찬가지로 0 이면 양수 , 1 이면 음수를 의미하게 된다
unsigned int
는 최상위 비트인 부호 비트에도 실제 데이터 값으로 4byte 공간인 총 32 개의 bit 를 모두 사용하겠다는 의미
0~4,294,967,295까지 실제 데이터 값의 표현 공간으로 부호 비트를 사용하지 않고 이용하 겠다는 뜻
unsigned int형의 메모리 표현 :
데이터형 Data Types LOGO
실수형 표현
실수형에는 데이터 형식이 고정 소수점fixed point과 부동 소수점floating point방식이 있으나
컴퓨터의 경우는 고정 소수점보다도 더 넓은 범위의 수를 나타 낼 수 있는 부동 소수점 방식을 이용 실수의 표현은 과학기술 계산 분야에서 이용하는 부동 소수점의 데이터 형식을 사용한다
부동 소수점 방식은 전기전자기술자협회Institute of Electrical and Electronics Engineers에서 개발한 IEEE 754 표준 4byte 형식으로서 실수를 4byte 로 처리하는 단정도single-precision와 8byte 로 처리하는
배정도double-precision 등이 있다
데이터형 Data Types LOGO
❏ float
float은 단정도 실수로서 크기는 4byte 인 총 32bits 의 메모리 공간을 할당받으며 , 1bit 를 부호비트 , 지수부는 8bits, 그리고 가수부를 23bits 로 사용하게 된다
실수의 정밀도는 가수부에 의해서 결정
만약 데이터의 2진수 표현이 주어진 가수부의 비트로 표현될 수 없는 경우는 일반적으로 반올림하 여 표현하기 때문에 이와 같은 경우는 오차가 발생할 가능성이 있다
float형에 의한 구조는 : Floating-point Register
데이터형 Data Types LOGO
❏ double
double은 배정도 실수로서 크기는 8byte인 총 64bits 의 메모리 공간을 할당받으며 , 1bit 를 부호비 트 , 지수부는 11bits, 그리고 가수부를 52bits 로 사용
float형과 마찬가지로 실수의 정밀도는 가수부에 의해서 결정
double형은 float형보다 2 배 이상을 표현할 수 있는 가수부를 가지고 있기 때문에 float 형보다는
정밀도가 높다고 볼 수 있다
실수형 데이터의 정밀도를 고려하여야 한다면 float보다는 double 로 자료형을 선언하는 것이 좋다
데이터형 Data Types LOGO
예제
실수형 표현 예제
1: #include <stdio.h>
2:
3: mian() 4: {
5: float silsu = 27.84f;
6:
7: printf("%f∖n", silsu);
8: printf("%e∖n", silsu);
9: printf("%E∖n", silsu);
10: printf("%g∖n", silsu);
11: }
데이터형 Data Types LOGO
예제
실수형 표현 예제
설 명
5행 : float 형 변수 silsu 를 선언할 때는 실수 값 뒤에 f 를 붙여서 사용한다 . 그 이유는 double 형으로 판단하는 문제 가
발생할 수 있기 때문이다 .
그러므로 자료형 float 으로 선언하는 경우는 실수형 데이터 값 뒤에 f 를 붙이도록 한다 . 만약 자료형을 double 로 선언한 경우는 f 를 빼고 실수형 데이터 값만 대입한다 .
예를 들면 double silsu=27.84; 로 초기화하면 된다 .
7행 : 출력 지정 문자가 %f 로 지정된 경우에는 기본적으로 소수점 아래 6 자리까지 표현 된다 . 따라서 27.84 가 아닌 27.840000 로 출력된다 .
8행 ,9 행 : %e 는 지수형의 출력 지정 문자열로 가수 e 지수 형식으로 출력한다 . 여기서 e 지 수란 10지수이다 .
예를 들어 2014 의 경우는 0.2014x104로 표현할 수 있으며 , 이것은 0.2014e4 또는 0.2014E4 와 같이 표현이
데이터형 Data Types LOGO
문자형 표현 : code(ASCII code) 사용
char은 한 문자를 표현하기 위한 데이터형으로서 크기는 1byte 의 메모리 공간을 할당받으며 표현 범위는 -27[-128] ~ (27-1)[127]까지 이다
unsigned char 의 경우는 표현 범위가 0 ~ (28-1)[255] 까지이며 양의 정수만을 저장
예를 들어 char munja='K'; 와 같이 한 개의 문자 K 가 선언된 경우에 있어서 한 문자 K 는 변수 munja 에 저장되는 것이 아니라 다음과 같이 비트 정보에 대응하는 문자 가 저장된다
키보드 또는 변수에 문자 K 를 대입하게 되면 K라는 문자 형태가 메모리 공간으로 보내지는 것이 아니라 10 진수인 75 의 2진수 형태로 보내지게 된다
데이터형 Data Types LOGO
Dec Hex Char Dec Hex Char Dec Hex Char
32 20 Space 64 40 @ 96 60 `
33 21 ! 65 41 A 97 61 a
34 22 " 66 42 B 98 62 b
35 23 # 67 43 C 99 63 c
36 24 $ 68 44 D 100 64 d
58 3A : 90 5A Z 122 7A z
59 3B ; 91 5B [ 123 7B {
60 3C < 92 5C ∖ 124 7C |
61 3D = 93 5D ] 125 7D }
62 3E > 94 5E ^ 126 7E ~
… … . … … . 생략
데이터형 Data Types LOGO
예제
문자와 그에 대응하는 ASCII 코드 값 출력 예제
1: #include <stdio.h>
2:
3: mian() 4: {
5: char munja;
6:
7: scanf("%c",&munja);
8:
9: printf("입력 문자 : %c∖n", munja);
10: printf("10진수 [Dec] 값 : %d∖n", munja);
11: printf("16진수 [Hex] 값 : %x∖n", munja);
12:
13: }
데이터형 Data Types LOGO
예제
문자와 그에 대응하는 ASCII 코드 값 출력 예제
설 명
5행 : 자료형이 char 인 변수 munja 를 선언한다 .
7행 : scanf 함수에 의해서 키보드로부터 한 문자를 입력받는다 . 이때 문자 입력형식의 지정 문자는 %c 이다 .
9행 : printf 함수의 출력 내용에 따라서 한 문자를 출력하게 된다 . 이때 문자 출력형식 의 지정 문자도 %c 가 된다 .
10행 : 키보드로부터 입력된 문자에 대응하는 10 진수의 값을 ASCII 코드에 의해서 출력하게 된다 . 이때 출력 형식의 지정 문자는 %d 가 된다 .
데이터형 Data Types LOGO
특수문자
그 밖에 ASCII 코드에서 역 슬래시 backslash 인 ∖와 함께 표현되어 특별한 용도로 사용
10진수 [Dec] 16진수 [Hex] 문자 [Char] 의 미
0 00
∖0
널null문자라고 하며 , 문자열의 끝을 인식하게 한다 .10 0A
∖n
줄바꿈newline[개행 문자 ] 이라 하며 , 커서를 다음 줄의 시작 자리로 이동한다 .
9 09
∖t
수평탭vertical tab이라 하며 , 커서를 현재 줄에서 수평으로 다음 탭만큼 이동시킨다 .
8 08
∖b
백스페이스backspace라고 하며 , 커서를 한 글자 뒤로 이동한다 .13 0D
∖r
캐리지 리턴carriage return이라고 하며 , 커서를 현재 줄의 시작 위치로이동한다 .
34 22
∖"
큰따옴표double quote라고 하며 , 큰따옴표 자체를 의미한다 .데이터형 Data Types LOGO
예제
특수 문자의 출력 예제
1: #include <stdio.h>
2:
3: mian() 4: {
5: char munja='∖a';
6: char munja1='a';
7: char munja2='t';
8:
9: printf("벨소리울림 %c∖n", munja);
10: printf("%c%c∖n", munja1,munja2);
11: printf("%c∖t%c∖n", munja1,munja2);
12:
13: }
데이터형 Data Types LOGO
예제
특수 문자의 출력 예제
설 명
5행 : 특수 문자 중 경고음을 울리는 ∖ a 로 데이터 값이 초기화되어 있다 . 따라서 컴파 일 후에 실행하게 되면 제일 먼저 " 삐 " 하는 경고음이 울린다 .
6행 ,7 행 : 6 행과 7 행은 각각 알파벳 문자 a 와 t 가 초기화 되어 있다 .
여기서 주의할 사 항은 한 문자를 대입하는 경우는 반드시 작은따옴표인 ' ' 를 사용하여야 한 다 .
9행 : 출력 내용이 문자인 경우는 문자의 출력 형식 지정문자인 %c 를 사용한다 .
여기서 변수 munja 에 경고음을 울리는 특수 문자∖ a 로 지정되어 있으므로 삐 ~ 하는 경고 음이 출력되게 된다 .
10행 : 변수 munja1 에는 a, 변수 munja2 에는 t 의 문자가 각각 대입되어 있으므로 a 와 t 가 출력된다 . 이때 출력 형식 지정문자가 %c%c 와 같이 연속해서 붙어 있으므로 결과적으로 at 와 같이 출력되게 된다 . 11행 : 출력 형식 지정문자가 %c∖t%c 로 구성되어 있다 .
여기서 ∖ t 는 현재 줄에서 수 평으로 다음 탭만큼 이동시키는 기능을 수행하는 특수문자로서 , 첫 번째 %c 에 의 해서
데이터형 Data Types LOGO
출력형식 지정 문자
데이터 형태
출력 형식
지정 문자 의 미
정수형
%d
또는 %i 10진수로 출력한다 .%o
8진수로 출력한다 .%x
16진수로 출력한다 . 이때 소문자 a~f 로 사용한다 .
%X
16진수로 출력한다 . 이때 대문자 A~F 로 사용한다 .
%u
부호가 없는 10 진수로 출력한다 . unsigned 를사용할 때 쓰인다 .
문자형
%c
한 문자만을 출력한다 .문자열형
%s
문자열을 출력한다 .%f
또는 %lf 소수점이 있는 실수형태로 출력한다 .데이터형 Data Types LOGO
예제
"
정수 값 74를 초기화한 후에 ASCII코드 값의
상호변환에 의한 16 진수 , 8 진수 , 그에 대응하는 문자를 출력 "하는 예제
1: #include <stdio.h>
2:
3: mian() 4: {
5: int jeongsu=74;
6:
7: printf("16진수 : %x∖n", jeongsu);
8: printf("16진수 : %X∖n", jeongsu);
9: printf("8진수 : %o∖n", jeongsu);
10: printf("대응 문자 : %c∖n", jeongsu);
11: }
데이터형 Data Types LOGO
예제
"
정수 값 74를 초기화한 후에 ASCII코드 값의
상호변환에 의한 16 진수 , 8 진수 , 그에 대응하는 문자를 출력 "하는 예제
설 명
5행 : int 형 변수 jeongsu 를 선언하고 정수 값 74 를 대입하고 있다 .
7행 : %x 는 변수 jeongsu 에 대입된 값을 16 진수의 값으로 출력하라는 뜻이다 . 따라서 %x 는 대입된 정수 값 74 를 ASCII 코 드 값의 상호
변환에 의해서 16 진수로 출력이 가능 하게 된다 . 이때 %x 의 x 가 소문자인 경우는 a~f 를 소문자로 출력하라는 의미이므 로 출력결
과는 4a 가 된다 .
8행 : %X 는 변수 jeongsu 에 대입된 값을 16 진수의 값으로 출력하라는 뜻이다 . 따라서 %X 는 대입된 정수 값 74 를 ASCII 코 드 값의 상호
변환에 의해서 16 진수로 출력하게 된 다 . 이때 %X 의 X 가 대문자인 경우는 A~F 와 같이 대문자로 출력하라는 의미이므로 출력결과
는 4A 가 된다 .
9행 : %o 는 변수 jeongsu 에 대입된 값을 8 진수의 값으로 출력하라는 뜻이다 . 따라서 정 수 값 74 는 ASCII 코드 값의 상호변환
데이터형 Data Types LOGO
출력형식 지정 문자에 의한 자리수 표현
프로그램의 실행 결과를 출력할 경우 출력형식 지정 문자에 의해 출력 데이터의 자리수를 정해진 형식에 맞도록 출력 할 수 있다
printf(" % 플래그 / 폭 / .정밀도 / 출력형식 지정 문자 ", 인자들 [ 변수 / 상수 ]);
❏ printf
함수 내의 출력지정 문자 형 식표준 printf함수의 형식에서 플래그flag, 폭width, .정밀도precision 는 필요에 따라서 추가되 는옵션option 형태
LOGO
데이터형 Data Types LOGO
❏ %d
를 이용한 정수의 자리수 표현%d는 출력 값을 10진수로 변환하여 출력하는 출력형식 지정문자로 위에서 살펴보았던 플래그와 폭을 조합하여 사용할 수 있다
printf("%플래그 (폭 )d", 인자들 [ 변수 또는 상수 ]);
데이터형 Data Types LOGO
예제 10진수의 출력형식 지정문자 %d 를 이용한 자리수 표현의 예 제
1: /* %d를 이용한 자리수 표현 */
2: #include <stdio.h>
3:
4: main( ) 5: {
6: int jeongsu;
7: jeongsu=14;
8: // 실행 결과들 9: printf("%d n", jeongsu); ∖
10: printf("%5d n", jeongsu);∖ 11: printf("%+d n", jeongsu);∖ 12: printf("%+5d n", jeongsu);∖ 13: printf("%-d n", jeongsu);∖ 14: printf("%-5d n", jeongsu);∖
데이터형 Data Types LOGO
예제 10진수의 출력형식 지정문자 %d 를 이용한 자리수 표현의 예 제
설 명
6행 : 변수 jeongsu 에 int형의 10진수 데이터를 저장하겠다는 뜻이다 . 7행 : 변수 jeongsu 에 14라는 데이터를 대입하여 저장한다는 뜻이다 . 9행 : %d 는 변수 jeongsu 에 저장된 값을 10진수로 출력하라는 뜻이다 .
10행 : %5d 는 전체 5자리수를 확보하고 변수 jeongsu 에 저장된 값 14 를 우측부터 정렬하라는 뜻이다 . 11행 : %+d 는 +부호를 붙여 좌측부터 정렬하라는 뜻이다 .
12행 : %+5d 는 +부호를 붙여 우측부터 정렬하라는 뜻이다 .
13행 : %-d 는 좌측부터 정렬하라는 뜻이다 . 이때 -플래그는 -부호를 출력하지 않는다 .
14행 : %-5d 는 전체 5자리수를 확보하여 변수 jeongsu 에 저장된 값 14 를 좌측부터 정렬하라는 뜻이다 . 15행 : %0d 와 같이 %0 와 d사이의 폭이 주어지지 않은 경우는 6행의 %d 와 같은 결과 값을 출력하게 된다 .
데이터형 Data Types LOGO
❏ %f, %lf
를 이용한 실수의 자리수 표현%f,%lf는 출력 값을 실수로 출력하는 출력형식 지정문자로 소수점과 소수점 이하의 값 으로 구성된다
폭 은 소수점 위의 자리 , 소수점 , 그리고 소수점 이하의 자리 수를 포함한 전체 출력 폭 을 지정하여 주며 , 정밀도 는 소수점 이하 몇 자리까지 출력
할 것인가를 지정하여 준다
%f, %lf의 경우도 %d 와 마찬가지로 플래그를 사용 할 수 있으며 , -플래그인 경우만 데 이터 값이 좌측부터 정렬하게 된다
실수 값을 출력하기 위한 printf함수의 형식은 :
printf("%(폭 ). 정밀도f", 인자들 [ 변수 또는 상수 ]);
데이터형 Data Types LOGO
예제 실수의 출력형식 지정문자 %f 를 이용한 자리수 표현의 예제
1: /* %f를 이용한 자리수 표현 */
2: #include <stdio.h>
3:
4: main( ) 5: {
6: float sjlsu;
7: silsu=2.14f;
8: // 실행 결과들 9: printf("%f n", silsu);∖
10: printf("%.4f n", silsu);∖ 11: printf("%7.2f n", silsu);∖ 12: printf("%-7.2f n", silsu);∖ 13: }
데이터형 Data Types LOGO
예제 실수의 출력형식 지정문자 %f 를 이용한 자리수 표현의 예제
설 명
7행 : 변수 silsu 에 2.14f라는 데이터를 대입하여 저장한다는 뜻이다 .
여기서 데이터 뒤에 f 를 붙인 이유는 double형과 구별하기 위해서이다 . 9행 : %f 는 변수 silsu 에 저장된 값을 실수로 출력하라는 뜻이다 .
소수점 이하 6자리를 출력 하며 나머지 빈 공간은 0 으로 채워지게 된다 . 10행 : %.4f 는 반드시 소수점 이하 넷째 자리까지 출력하라는 뜻이다 .
따라서 소수점 이하인 14 를 채우고 2개의 빈 공간에는 0 으로 채워지게 된다 .
11행 : %7.2f 는 전체 자리수를 7자리 확보하고 반드시 소수점 이하는 2자리까지만 표시한다는 뜻이다 . 12행 : %-7.2f 와 같이 -플래그가 붙은 경우는 반드시 좌측부터 정렬하게 된다 .
데이터형 Data Types LOGO
❏ %c
를 이용한 문자의 자리수 표현%c는 한 문자를 출력하는 출력형식 지정문자
폭 이 주어진 상태에서는 기본적으로 우측 정렬을 한다 좌측부터 정렬을 하고 싶을 때는 -플래그를 사용하면 된다 한 문자를 출력하기 위한 printf함수의 형식은 :
printf("%-플래그 (폭 )c", 인자들 [ 변수 또는 ' 문자 ']);
데이터형 Data Types LOGO
예제 문자의 출력형식 지정문자 %c 를 이용한 자리수 표현의 예제
1: /* %c를 이용한 자리수 표현 */
2: #include <stdio.h>
3:
4: main( ) 5: {
6: char munja;
7: munja='B';
8: // 실행 결과들 9: printf("%c n", munja);∖
10: printf("%5c n", munja);∖ 11: printf("%-5c n", munja);∖ 12:
13: }
데이터형 Data Types LOGO
예제 문자의 출력형식 지정문자 %c 를 이용한 자리수 표현의 예제
설 명
7행 : 변수 munja 에 'B'라는 데이터를 대입하여 저장한다는 뜻이다 . 여기서 한 문자를 데이터로 사용하는 경 우는 반드시 작은따옴표 (' ') 를 붙여준다 .
9행 : %c 는 변수 munja 에 저장된 값을 문자로 출력하라는 뜻이다 .
10행 : %5c 는 전체 자리수를 5자리 확보하고 한 문자를 출력하라는 뜻이다 . 이때 출력되는 한 문자는 우측부터 정렬하게 된다 .
11행 : %-5c 와 같이 -플래그를 사용하여 지정된 경우는 먼저 전체 자리수를 5자리 확보하고 한 문자를 출력 할 때
좌측부터 정렬하라는 뜻이 된다 .
데이터형 Data Types LOGO
sizeof 연산자
sizeof연산자는 어떤 자료형에 대한 저장 공간의 크기 및 배열의 크기를 byte
로 확인 할 때 사용되는 연산자 sizeof연산자의 형식으로 인해서 함수로 착각하는 경우가 있는데 절대적으로 sizeof 는 함수가 아닌 연산자 sizeof연산자의 소괄호 내에는 하나의 인수 ( 자료형 , 변수 , 상수 , 수식 )만을 사용한다
sizeof(자료형, 변수, 상수, 수식);
데이터형 Data Types LOGO
예제 sizeof연산자의 사용 예제
1: /* sizeof연산자의 예 */
2: #include <stdio.h>
3:
4: main( ) 5: {
6: int jeongsu=100;
7: char munja='A';
8:
9: printf("%d Bytes\n",sizeof(int));
10: printf("%d Bytes\n",sizeof(jeongsu));
11: printf("%d Bytes\n",sizeof jeongsu);
12: printf("%d Byte\n",sizeof(munja));
13: printf("%d Byte\n",sizeof munja);
14: printf("%d Bytes\n",sizeof 26.3);
15: printf("%d Bytes\n",sizeof 26.3f);
16: printf("%d Bytes\n",sizeof (10+30));
17:
데이터형 Data Types LOGO
예제 sizeof연산자의 사용 예제
설 명
9행 : sizeof(int) 는 int형의 크기인 4bytes 를 반환한다 . 인수가 자료형인 경우는 소괄 호를 생략할 수 없다 .
10행 : sizeof(jeongsu)에서 변수 jeongsu 는 int 형 변수이므로 4bytes 를 반환한다 .
11행 : 인수가 변수인 경우는 소괄호를 생략하여도 된다 . 소괄호를 생략할 경우에 주의 사항 은 sizeof 와 변수 jeongsu사이에 공백 을 두어야 한다 .
12행 : sizeof(munja)에서 변수 munja 는 char 형 변수이므로 1byte 를 반환한다 . 13행 : 11행과 마찬가지로 인수가 변수이므로 소괄호를 생략하여도 된다 .
14행 : 인자가 실수인 26.3경우는실수 값 뒤에 f
가 생략되어 있으므로 자료형 double 로 처리하여 8bytes 를 반환한 다 .
15행 : 인자가 실수인 26.3f이므로 자료형 float으로 처리되어 4bytes 를 반환한다 .
16행 : 인자가 수식인 경우는 소괄호를 생략할 수 없으며 , (10+30)
은 수식 결과가 (40) 이므로 int형의 크기인
데이터형 Data Types LOGO
자료형 변환
Type conversion자료형 변환이란 데이터 값이 저장되어 있는 공간의 자료형을 서로 변환이 가능하게 해준다 는 것을 의미 자료형 변환이 필요한 이유로는 우리가 사용하는 컴퓨터 CPU 는 수식의 연산 시에 피연산자가
서로 같은 자료형일 경우에만 연산을 수행하기 때문
자료형을 바꾸는 것을 자료형 변환이라고 하며 , 그 유형은 자동 ( 암시적 ) 형변환Automatic(implicit) type conversion 과 강제 ( 명시적 ) 형변환Explicit type conversion 으로 분류
데이터형 Data Types LOGO
자동 형변환
자료형의 우선순위가 높은 순서대로 자동적으로 컴파일러에 의해서 자료형 변화
자료형의 우선순위
char → short → int → unsigned → long → float → double
데이터형 Data Types LOGO
예제 변수 jeongsu 에 정수 값 20,
변수 silsu 에 실수 값 30.4
를 대 입한 후 총합을 구하는 예제
1: /* 자동형 변환의 예 */
2: #include <stdio.h>
3:
4: main( ) 5: {
6: int jeongsu=20;
7: double silsu=30.4;
8:
9: printf("%d Bytes\n",sizeof(jeongsu+silsu));
10: printf("%lf \n",jeongsu+silsu);
11: printf("%d \n",jeongsu+silsu);
12: }
데이터형 Data Types LOGO
예제 자료형 int 에 실수 값을 대입한 경우의 예제
1: /* 정수 자료형 int 에 실수 값을 대입 */
2: #include <stdio.h>
3:
4: main( ) 5: {
6: int number=8.293851; // 자료형 int 에 7: // 실수 값을 대입
8: printf("%d \n",number);
9: }
데이터형 Data Types LOGO
강제 형변환
강제 형변환은 명시적 형변환이라고도 하며 , 자료형의 우선순위에 의해서 자동 형변환이 되는 것이 아니라 형변환 연산자 type cast operator를 사용하여 프로그래머가 직접 형변환을 시키는 것
강제 형변환 형식 강제 형변환의 예
(강제 형변환 자료형 ) 변수 또는 수식
(float)9
(int)8.293851
정수 값 9 가 강제 형변환에 의해서 실수 값 9.000000 으로 변환한다 .
실수 값 8.293851 가 강제 형변환에 의해서 소수점 이하가 소 실되고 정수 값 8 로 변환된다 .
데이터형 Data Types LOGO
예제 강제 형변환 사용 예제
1: #include <stdio.h>
2:
3: mian() 4: {
5: int a=20, b=30, total;
6: float x=8.3f, y=3.4f, value;
7:
8: total=a+b;
9: printf("%.3f∖n", (float)total);
10:
11: printf("%f \n", x/y);
12: printf("%d \n", (int)x/(int)y);
13:
14: value=(int)x+y;
15: printf("%.3f \n", value);