C의 기본 구성 요소
토큰 및 기본자료형(1)
Chan-Su Shin
문자 (character)
•
문자 세트(Character Set)
–
알파벳 소문자 a b c d … x y z
–알파벳 대문자 A B C D … X Y Z
–
숫자 0 1 2 3 4 5 6 7 8 9
–특수문자
+ - * / = ( ) { } [ ] < > ‘ “ ! @ # $ % & _ | \ . , ; : ?
\space \n \t \r \b \a \’ \” \? \0
토큰 (token)
•
문자 집합에 있는 하나 이상의 문자들로 이루어진 C에서 의미를 가지는 단어(word)
– 키워드 (keyword) – 식별자 (identifier) – 상수 (constant)
– 문자열 상수 (string constant) – 연산자 (operator)
– 구두점 (punctuation)
키워드 (keyword)
•
C 언어에서 고유한 의미를 가지는 예약된 토큰
– 키워드는 다른 의미로 사용될 수 없다. (다른 변수, 함수의 이름으로 사용불가)
auto do goto signed unsigned
break double if sizeof void
case else int static violate
char enum long struct while
const extern register switch continue float return typedef default for short union
식별자(identifier)
•
알파벳, 숫자, underscore _ 로만 이루어진 토큰
– 변수 이름, 상수 이름, 함수 이름 등으로 사용할 수 있다.
– _ 로 시작하는 식별자는 C 언어에서 사용하는 식별자와 충돌할 수 있다.
– 잘못된 식별자는 컴파일 과정에서 에러로 출력된다.
– 숫자가 처음에 오면 안된다.
올바른 식별자 잘못된 식별자
kingkong _my_id Iwill#you 2paradise I_am_sorry Love4you -plus You babo?
상수(constant)
•
숫자 상수 (number constant)
– 정수 상수 0, 125, 56892001987 (-777) – 실수 상수 3.141569, 1.414, 37.5
– 10, 010, 0x10 (10진법, 8진법, 16진법, 출력시: %d, %o, %x 사용)
•
문자 상수 ‘A’, ‘c’, ‘1’, ‘+’,
(그러면 작은따옴표는?)•
문자열 상수 (string constant)
– 한 쌍의 큰 따옴표 (“)에 의해 묶인 문자 집합에 속하는 문자들로 구성된 상수
“C language?” 9개의 알파벳, 1개의 공백, 1개의 특수문자 (물음표)로 구성된 문자열 상수
“” Null 문자열 상수
“ ” 6개의 공백으로 구성된 문자열 상수
“a = b * 2 \” ” 3개의 알파벳, 1개의 숫자, 6개의 공백, 3개의 특수문자로 구성된 문자열 상수
기본 자료형
Chan-Su Shin
•
컴퓨터에서의 모든 정보는 2진수의 형태로 변환되어 저장됨
•
D진수
– 0부터 D – 1까지의 수로 세는 방법 – 8진수: 0 ~ 7
– 16진수: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, __, __, __, __, __, __
•
10진수 2진수, 8진수, 16진수
– 45
•
2진수 10진수
– 01011011
•
2진수 8진수, 16진수
진수와 진수변환
•
printf(“십진수 = %d\n”, 45);
•
printf(“8진수 = %d\n”, 055); // 0을 붙인 상수는 8진수로 간주
•
printf(“16진수 = %d\n”, 0x2D); // 0x를 붙인 상수는 16진수로 간주
•
%d, %o, %x 사용하면 10진수, 8진수, 16진수 형태로 출력 가능
•
28을 2진수, 8진수, 16진수로 나타내면?
C에서의 진수표현 (예: 45)
•
특정 정보를 컴퓨터에 저장하기 위해선,
– 정보가 저장되는 장소(변수의 이름)와 – 정보의 종류가 명확히 정의되어야 함.
•
변수는 그러한 정보를 저장하기 위한 container(박스)
•
모든 변수는 사용하기 전에 선언되어야 함.
– int a;
1. Compiler에게 변수의 이름이 a이고,
2. 정수 값을 담기 위한 저장공간(4byte)을 메모리에 할당하라는 의미
•
int a = 5; (선언과 초기값 설정을 동시에)
변수 (variable)
a
5
변수 이름
• 올바른 식별자이어야 한다.
– 알파벳 (a – z, A – Z), 숫자 (0 – 9), __ (underscore)만으로 구성된 문자열로 정의된다.
– 숫자가 첫번째에 올 수 없다.
• 대문자와 소문자는 구별된다.
• 하나의 underscore나 두 개의 연속된 underscore로 시작하는 변수는 컴파일러에 의해 예약된 경우가 많다. (그러므로 가능하면 피해야 한다.)
• 키워드는 변수의 이름으로 사용할 수 없다.
• 변수의 길이는 원칙적으로 제한이 없다. 그러나 처음 31개의 문자만을 변수의 이름으로 지정한다. (ANSI C)
– int abcdefghijklmnopqrstuvwxyzabcd_aaaa;
int abcdefghijklmnopqrstuvwxyzabcd_bbbb;
– ANSI C에서는 두 변수는 같은 변수로 인식되어 컴파일할 때 에러가 발생한다.
– C++에서는 모든 문자를 비교하여 변수의 이름을 구별한다.
기본 자료 형 (data types)
정수형
char signed char
unsigned char
short int long
unsigned
short unsigned unsigned long
부동형
float double longdouble
문자와 char 자료형
•
문자
– `a’, `+’, `%’, `Z’, `2’
•
char 자료형
– 문자를 저장할 수 있는 자료형으로 내부적으론 int 자료형으로 간주됨 – char x; x = `a’; printf(“ This is %c\n”, x); // printf(“%d\n”, x); 라면?
– 1 byte (8 bits)의 기억공간이 할당되어 256개의 문자를 표현 할 수 있음
– ASCII 코드
0 1 0 0 1 1 1 0
ASCII 코드 (일반문자)
`a’
97
`b’
98
`c’
99 - - - `z’
122
`A’
65
`B’
66
`C’
67 - - - `Z’
90
`0’
48
`1’
49
`2’
50 - - - `9’
57
`&’
38
`*’
42
`+’
43 - - -
•
\로 시작함
•
두 개의 문자가 하나의 특수문자를 나타냄
•
\\ = \92 = \0232 = \x5c
ASCII 코드 (특수문자)
경고
`\a’
7
역슬래시
`\\’
92
백스페이스
`\b’
8
캐리지 리턴
`\r’
13
큰 따옴표
`\”’
34
폼피드
`\f’
12
수평탭
`\t’
9
개행
`\n’
10
널 문자
`\0’
0
작은따옴표
`\’’
39
예제
•
printf ( “ %c \n”, `\a’);
•
printf (“ %c %c %d\n”, `a’, `a’+1, `a’+2);
•
printf (“ \” abc \’ \n”);
•
printf(“ %c %c %c\n”, `\7’, `\07’, `\x7’);
signed vs. unsigned char
•
unsigned char x
– x는 양수 문자 값만을 저장한다. 그래서 0부터 255 까지 저장 가능
•
signed char x
– x는 음수와 양수로 문자 값을 저장 – -128, -127, …, -1, 0, 1, …, 126, 127
– 방법1: MSB = 0이면 양수, 1이면 음수로 표현 (덧셈 문제? +3 + (-3) = ?) – 방법2: 음수는 양수의 2의 보수로 표현 (1의 보수 + 1)
(1) 0의 표현은? (2) 10000000은 얼마?
(3) 왜 양수는 127이 최대고, 음수는 -128이 최소인가?
•
char x
– 컴파일러에 따라 signed 일 수도 있고 unsigned 일 수도 있음
0 1 0 0 1 1 1 0
MSB