2. 개요 ¶
- 카톡 회ì�˜ ê²°ê³¼ 초안으로 ì›” 15~16/í™” 16~17시 ì§„í–‰ ì˜ˆì •
- High-levelì�˜ programming skill보단 low-levelì�˜ HWì �ì�¸ 구조를 설명하여 low-levelì—�서 ì ‘ê·¼í•˜ëŠ” ë�…특한(...) 코딩 스타ì�¼ ì „ìˆ˜
- ì°¸ê³ ìž�료: ì†�봉수 êµ�수님 수업ìž�료: http://cau.ac.kr/~bongbong/c10/
2.1. 1회차(2012 - 03 - 27) ¶
- ì „ì›� ì°¸ì„�
- C언어를 low-levelì�˜ ê´€ì �ì—�서부터 ì ‘ê·¼í•˜ê¸° 위해 í�°ë…¸ì�´ë§Œ 아키í…�ì³�부터 수업
- C언어는 UNIX 개발ì�„ 목ì �으로 만들어진 언어ì�´ê¸° 때문ì—� OSì�˜ 기초가 ë�˜ëŠ” 기초ì �ì�¸ 컴퓨터시스템ì�€ ì�´í•´í• 필요가 ìžˆë‹¤ê³ íŒ�단
- í�¬ì�¸í„° ê°œë…�ì�´ë‚˜ scanfì—�서 &ê°€ ì“°ì�´ëŠ” ì�´ìœ 등 여러가지 keywordì—� 대해 설명하기 위함
- binary digit를 비롯한 컴퓨터 시스템ì�˜ 기초ì �ì�¸ ê°œë…� ë˜�한 설명
- C언어는 UNIX 개발ì�„ 목ì �으로 만들어진 언어ì�´ê¸° 때문ì—� OSì�˜ 기초가 ë�˜ëŠ” 기초ì �ì�¸ 컴퓨터시스템ì�€ ì�´í•´í• 필요가 ìžˆë‹¤ê³ íŒ�단
- 즉��서 코드를 작성해가며, Compile error, logical error, debug error� 개�� 대해 설명
- 추후 프로그래ë°�시 ì—�러 ì�´ìœ 와 대처방법 부연 설명
- 추후 프로그래ë°�시 ì—�러 ì�´ìœ 와 대처방법 부연 설명
- C언어� 특징 설명
- variable ë°� main functionì�˜ ì—í• ì„¤ëª…
- #include가 무엇�지 header file� 무엇�지 설명
- 컴파ì�¼ëŸ¬ì�˜ ì—í• ê³¼ compile -> link -> build ê³¼ì • 설명
2.1.1. ê³¼ì œ: ì�´ í•목ì—� 오늘 ë°°ìš´ ë‚´ìš©ì�„ ì •ë¦¬í•˜ì‹œì˜¤. ¶
- c 언어� 특징
- High-Level 언어ì�˜ 특징과 Low-Level 언어ì�˜ 특징ì�„ 모ë‘� ì§€ë‹ˆê³ ìžˆë‹¤
- High-Level 언어� 가까울수� 사람� �해하기 쉬워진다 (Human Friendly)
- High-Level 언어� 가까울수� 사람� �해하기 쉬워진다 (Human Friendly)
- Low-Level 언어� 가까울수� 기계가 �해하기 쉬워진다 (Machine Friendly)
- High-Level 언어ì�˜ 특징과 Low-Level 언어ì�˜ 특징ì�„ 모ë‘� ì§€ë‹ˆê³ ìžˆë‹¤
- High-Level 언어를 Low-Level 언어로 변환해주는 ì—í• ì�„ 한다
- 현재 사용ë�˜ëŠ” ëª¨ë“ ì»´í“¨í„°ì—� ì �ìš©ë�˜ëŠ” 범용 컴퓨터 구조
- ì œì–´ìž¥ì¹˜ì™€ 연산장치, 메모리, ìž…ì¶œë ¥ìž¥ì¹˜ë¡œ 구성
- ì œì–´ìž¥ì¹˜ì™€ 연산장치, 메모리, ìž…ì¶œë ¥ìž¥ì¹˜ë¡œ 구성
- bit
- �진법으로 나타낼 수 있는 �릿수를 나타낸다
- 1bit=0,1 / 2bit=00,01,10,11 / 3bit=000,001,010,011,100 ...
- 1bit=0,1 / 2bit=00,01,10,11 / 3bit=000,001,010,011,100 ...
- 함수 (Function) 들� 집합
- ì�´ë¯¸ 존재하는 함수를 ê°€ì ¸ë‹¤ ì“°ë ¤ í• ë•Œ í—¤ë�”파ì�¼ì�„ 불러와서 사용한다
- ì�´ë¯¸ 존재하는 함수를 ê°€ì ¸ë‹¤ ì“°ë ¤ í• ë•Œ í—¤ë�”파ì�¼ì�„ 불러와서 사용한다
- 변수 (variable)
- int, float, char 등
- int는 ì •ìˆ˜ë¥¼ ë‚˜íƒ€ë‚´ê³ ìž� í• ë•Œ 사용하며 ì¶œë ¥ì‹œ %d를 사용
- float는 소수ì � 아래ì�˜ 숫ìž�까지 í‘œí˜„í•˜ê³ ìž� í• ë•Œ 사용하며 ì¶œë ¥ì‹œ %f를 사용
- char는 문ìž�를 ë‚˜íƒ€ë‚´ê³ ìž� í• ë•Œ 사용하며 ì¶œë ¥ì‹œ %c를 사용
- int는 ì •ìˆ˜ë¥¼ ë‚˜íƒ€ë‚´ê³ ìž� í• ë•Œ 사용하며 ì¶œë ¥ì‹œ %d를 사용
- int: integer type, 4 bytes
- char: It used to express a character, but also used to express a integer. 1 byte
- float: 4 byte, floating type number. Specification in IEEE 754-2008
- function: input -> output
- Main function
- real part of program
- It has start and end point of a program.
- return 0; : 0 is a flag noticing OS that program is ended.
- real part of program
2.2. 2회차(2012 - 04 -05) ¶
- 수업내용: Variables, Data Types, Standard I/O
- Variables
- identifier -> �름 짓기�� 규칙� 있다.
- keyword
- overflow
- escape sequence
- identifier -> �름 짓기�� 규칙� 있다.
- Data Type
- Integer type: int(4 bytes), char(1 byte, be often used to express a character)
- float type: float, double (double is more correct than float)
- unsigned - MSB를 통해서 2배� 수를 � 많� 나타낼 수 있다는 개� 설명
- Maximum, minimum value of int(경우� 수 �용)
- Integer type: int(4 bytes), char(1 byte, be often used to express a character)
- Standard I/O
- format specifications
- printf, scanf
- scanfì—�서 왜 & ì�´ 놈ì�´ ë“±ìž¥í• ê¹Œ?
- format specifications
- preprocessor(ì „ì²˜ë¦¬ê¸°)
- #define
- #define
- automatic type conversion
- Example Problem: Write a program that converts meter-type height into feet(integer),inch(float)-type height. Your program should get one float typed height value as an input and prints integer typed feet value and the rest of the height is represented as inch type. (1m=3.2808ft=39.37inch) (출처: �봉수 �수님 ppt)
- Variables
2.2.1. ê³¼ì œ ¶
- ë°°ìš´ 수업 ë‚´ìš© ì •ë¦¬
- 2진법, ëª…ì œ, 삼단논법 공부해오기
- 오늘 못 ì§ ê±° ë§ˆì € 다 짜오기
- ê³ 1 수학 ê³¼ì • ì œëŒ€ë¡œ 공부해보기
- 변수� �름� 반드시 문�나 underscore (_) 로 시작해야 한다
- 변수� �름� 대소문�를 구분한다
- 컴파ì�¼ëŸ¬ì—� ì�˜í•´ ì�´ë¯¸ ì •í•´ì ¸ 있는 ì�´ë¦„ (identifier)
- 변수ì�˜ ì�´ë¦„으로 ì‚¬ìš©í• ìˆ˜ 없다
- C 언어�는 29 개� 키워드가 존재
- 변수ì—� ì €ìž¥í• ìˆ˜ 있는 값보다 ë�” í�° ê°’ì�´ ì €ìž¥ë�˜ì—ˆì�„ 때 ë°œìƒ�한다
- 2진법으로 수가 처리ë�˜ëŠ” ê³¼ì •ì—�서 ë°œìƒ� (?)
- ìž…ë ¥í•œ 것과 ì „í˜€ 다른 ê°’ì�´ ìƒ�겨나게 ë�œë‹¤
- íŠ¹ì •í•œ 기능ì�„ 수행하기 위한 알림으로ì�¨ \ (back slash) 로 표시
- 줄바꿈 (\n), íƒ (\t), í�°ë”°ì˜´í‘œ (\"), ìž‘ì�€ 따옴표 (\'), ì—슬래시 (\\) 등.
- int : 4 byte. ì •ìˆ˜ë¥¼ 표현. 소수ì � 아래로는 버린다
- char: 1 byte. 글�를 표현 (character).
- float, double: 4 byte, 8 byte. 실수를 표현하므로 소수ì � 아래 숫ìž�까지 나타낼 수 있다
- doubleì�´ float보다 ë�” ì •í™•í•˜ê²Œ 수를 í‘œí˜„í• ìˆ˜ 있다
- float => -1.0E+38 ~ 1.0E+38 / double => -1.0E+308 ~ 1.0E+308
- 1.0E?
- doubleì�´ float보다 ë�” ì •í™•í•˜ê²Œ 수를 í‘œí˜„í• ìˆ˜ 있다
- unsigned ~ : 양수 부분만 표현함으로ì�¨ ë�” í�° 범위ì�˜ 수를 나타낼 수 있지만 ì�Œìˆ˜ë¥¼ í‘œí˜„í• ìˆ˜ 없다
- 수를 �진법으로 표현 시 양수/�수를 구분하기 위해 사용�는 맨 앞�리 0� 수를 표현하는 �� 사용하여 � 배 많� 수를 표현
- 수를 �진법으로 표현 시 양수/�수를 구분하기 위해 사용�는 맨 앞�리 0� 수를 표현하는 �� 사용하여 � 배 많� 수를 표현
- 2^31-1=???
- 기본ì �ì�¸ ìž…ë ¥ (Input) / ì¶œë ¥ (Output)
- 헤� 파� <stdio.h>
- printf ("ë‚´ìš©", argument);
- scanf("format specifier(s)", &argument);
- format specifications
- 배운 것 - %d (int), %f (float), %c (char)
- 배운 것 - %d (int), %f (float), %c (char)
- scanfì�˜ & : ìž…ë ¥ë°›ëŠ” ê°’ì�„ &ë’¤ì—� 위치한 변수ì—� ì €ìž¥í•˜ê¸° 위해 메모리ì—� 존재하는 변수ì�˜ 위치를 알리는 ì—í• ì�„ 한다
- #define 으로 사용
- ìž�ì‹ ì�´ ì§€ì •í•˜ëŠ” 문ìž�ì—´ì—� íŠ¹ì •í•œ ê°’ 등ì�„ ì§€ì •í•´ë‘�ê³ ì‚¬ìš©í• ìˆ˜ 있다
#include <stdafx.h>
#include <stdio.h>
int main ()
{
float meter=0;
scanf("%f",&meter);
int feet=meter*3.2808;
float inch=(((meter*3.2808)-feet)/3.2808)*39.37;
printf("%d feet %f inch\n",feet,inch);
return 0;
}
2.3. 3회차 (2012 - 04 -09) ¶
- Operators
- arithmetic operators: binary, unary
- priority
- precedence
- arithmetic operators: binary, unary
- assignment operator
- decrements / increments : postfix / prefix
- 축약 연산�
- bitwise operator
- Binary numeral system
- Binary numeral system
- 2's complement: �수 표시방법
#include<stdio.h>
int main()
{
int input, output;
scanf("%d", &input);
output = ~input;
output ++;
printf("%d\n", output);
return 0;
}
2.3.1. ê³¼ì œ ¶
- 당연히, 오늘 ë°°ìš´ ë‚´ìš© ì •ë¦¬(별로 없지?)
- íŠ¹ì •í•œ 수를 ìž…ë ¥ë°›ê³ and operator를 ì�´ìš©í•˜ì—¬ ê·¸ 수 보다 ìž‘ì�€ ì§�수 중 가장 í�° ì§�수를 ì¶œë ¥í•˜ë�¼(scanf, printf ì�´ìš©)
- shift operator를 ì�´ìš©í•˜ì—¬ 128(=2^5)ì�„ ì¶œë ¥í•˜ê³ , 128ì�„ íŠ¹ì • 변수(variable)ì—� ì €ìž¥í•˜ì—¬ ê·¸ 변수와 left shift operator를 ì�´ìš©í•˜ì—¬ 32를 ì¶œë ¥í•˜ë�¼
- 다� 계산� 값� 예�하�
- 1110 0111 ^ 1101 0001 = ?
- 1110 0111 | 1101 0001 = ?
- 1110 0111 ^ 1101 0001 = ?
- Assignment operator
- Equal sign (=) � Assignment operator 를 나타낸다
- 변수�게 값� 주기 위해 사용�다
- 계산 순서 : 오른쪽 -> 왼쪽
- Equal sign (=) � Assignment operator 를 나타낸다
- Decrement / Increment : postfix / prefix
- Decrement는 --로, Increment는 ++로 나타낸다
- ��값� 1
- Postfix ì�¼ 경우 변수 ë’¤ì—� Decrement/Increment operator를 사용하며 다른 계산ì�´ ë��난 후 ì �ìš©ë�œë‹¤
- Prefix ì�¼ 경우 변수 앞ì—� Decrement/Increment operator를 사용하며 다른 계산ì�„ 실행하기 ì „ì—� ì �ìš©ë�œë‹¤
- Decrement는 --로, Increment는 ++로 나타낸다
- 축약 연산� (Shorthand Operators)
- 계산 ê³¼ì •ì—� ê°™ì�€ 변수가 í�¬í•¨ë�˜ì–´ 있ì�„ 경우 축약 ì—°ì‚°ìž�를 ì‚¬ìš©í• ìˆ˜ 있다
- +=, -=, *=, /=, %=
- Ex. (A = A + B)는 (A += B ) 로 표현 가능
- Ex. (A = A + B)는 (A += B ) 로 표현 가능
- 계산 ê³¼ì •ì—� ê°™ì�€ 변수가 í�¬í•¨ë�˜ì–´ 있ì�„ 경우 축약 ì—°ì‚°ìž�를 ì‚¬ìš©í• ìˆ˜ 있다
- 비트 연산� (Bitwise Operators)
- 2진법으로 표현�는 Bit를 계산하여 표현
- 2진법 (Binary numeral system)
- 1과 0만� �용해 숫�를 나타내는 방법.
- 컴퓨터�서 2진법� 1� true, 0� false로 나타나는 경우가 있다
- 2진수를 10진수로 ë°”ê¾¸ë ¤ë©´ 2진수ì�˜ ìž�릿수ì—� ë”°ë�¼ 2^(n-1)ì�„ 곱해주면 ë�œë‹¤
- 10진수를 2진수로 ë°”ê¾¸ë ¤ë©´ 10진수를 2로 나누어 나머지가 있다면 1, 없다면 0ì�„ ì �어넣으면 ë�œë‹¤
- 2진법 (Binary numeral system)
- Left shift : a<
- aì�˜ ëª¨ë“ ë¹„íŠ¸ë¥¼ 왼쪽으로 n 칸 옮기며, 새로 ìƒ�겨난 비트는 0ì�´ ë�œë‹¤
- aì�˜ ëª¨ë“ ë¹„íŠ¸ë¥¼ 왼쪽으로 n 칸 옮기며, 새로 ìƒ�겨난 비트는 0ì�´ ë�œë‹¤
- Right shift : a>>n
- aì�˜ ëª¨ë“ ë¹„íŠ¸ë¥¼ 오른쪽으로 n 칸 옮기며, 새로 ìƒ�겨난 비트는 0ì�´ ë�œë‹¤
- aì�˜ ëª¨ë“ ë¹„íŠ¸ë¥¼ 오른쪽으로 n 칸 옮기며, 새로 ìƒ�겨난 비트는 0ì�´ ë�œë‹¤
- And ì—°ì‚° : a & b
- a와 b� 비트를 비�하여 서로 다르면 0, 서로 같다면 1로 표현한다
- a와 b� 비트를 비�하여 서로 다르면 0, 서로 같다면 1로 표현한다
- Or ì—°ì‚° : a | b
- a와 b� 비트를 비�하여 하나�� 1��면 1로 표현한다
- a와 b� 비트를 비�하여 하나�� 1��면 1로 표현한다
- XOR ì—°ì‚° : a ^ b
- a와 b� 비트를 비�하여 서로 다르다면 1, 서로 같다면 0으로 표현한다
- a와 b� 비트를 비�하여 서로 다르다면 1, 서로 같다면 0으로 표현한다
- 1's complement : ~a
- aì�˜ 비트를 모ë‘� ë°˜ì „ì‹œí‚¨ë‹¤ : 1->0, 0->1
- aì�˜ 비트를 모ë‘� ë°˜ì „ì‹œí‚¨ë‹¤ : 1->0, 0->1
- 2진법으로 표현�는 Bit를 계산하여 표현
- 2's complement
- Bit 계산으로 �수를 표현
- A를 -A로 ë‚˜íƒ€ë‚´ë ¤ë©´, Aì�˜ 비트를 1's complement로 ë°˜ì „ì‹œí‚¨ 후 1ì�„ ë�”해주면 ë�œë‹¤
- A를 -A로 ë‚˜íƒ€ë‚´ë ¤ë©´, Aì�˜ 비트를 1's complement로 ë°˜ì „ì‹œí‚¨ 후 1ì�„ ë�”해주면 ë�œë‹¤
- Bit 계산으로 �수를 표현
#include <stdio.h>
int main ()
{
int num ;
int temp1 ;
printf ("enter a number : ");
scanf ("%d", &num);
temp1 = num & 1 ;
if (temp1 == 1) {
printf ("%d\n", num - 1);
}
else if (temp1 == 0) {
printf ("%d\n", num - 2);
}
return 0;
}
#include <stdio.h>
int main ()
{
int num = 1 ;
num = num<<7;
printf ("%d\n", num);
int num2 ;
num2 = num ;
num2 = num2>>2;
printf ("%d\n", num2);
return 0;
}
- 1110 0111 ^ 1101 0001 = 0011 0110
- 1110 0111 | 1101 0001 = 1111 0111










