일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 함수
- CS
- Kotlin
- 알고리즘
- Tips프로그래밍강좌
- Tips강좌
- tipssoft
- VS ERROR
- Javascript
- c++
- 티스토리
- Desktop
- 연산자
- 백준
- 배열
- 지식나눔강좌
- 문법
- 포인터
- 리뷰
- Programming
- Direct2D
- 프로그래밍
- c#
- Win32
- Windows
- Visual Studio
- 김성엽
- 이지스퍼블리싱
- c
- doit코틀린프로그래밍
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
[TIPS 19TH] 01 : 2018.06.25. (월) 본문
1. C언어
C언어는 타 언어와는 달리 개발자였던 데니스 리치가 자신의 프로젝트(OS 제작) 진행을 위해 B언어에서 개발한 언어이다.
따라서 타 언어와 달리 당시 개발자들(데니스 리치 자신만 불편것들일지도..)이 불편을 겪던 것들을 개선하면서 만든 언어로, 개발 편의성이 있다.
2. 주석, 기본 문법
단일 라인의 주석 >> [ // comment ] 사용
다중 라인의 주석 >> [ /* comment */ ] 사용 (comment 에 넣고 싶은 주석)
C 언어에서의 줄구분 >> ' ; ' (세미콜론) 사용
C언어에서 사용하는 방법
/*
2018.06.25. (월)
2018 Tips 19th
프로그래밍 지식나눔 강좌 첫 번째 날
*/
#include <stdio.h>
int main(void){
// 프로그램 진입점
char s[] = "hello"; printf("%s world");
// 위 코드처럼 세미콜론만 잘 작성해주면 같은 줄에 두 개의 문장(?)을 함께 작성할 수 있다.
// 실제 코드를 작성할 때 간단한 문법의 경우 코딩하는 스타일
printf("hello world");
return 0;
}
++추가사항
...
int n = 5; // 단일 명령문
int _12 = 23; // 단일 명령문
{ // 복합 명령문 중괄호 {}로 단일 명령문이 묶인 형태
int k = 8;
char ch = 'A';
}
...
3.변수
변수 : 아직 알려지지 않거나 어느 정도까지만 알려져 있는 양이나 정보에 대한 상징적인 이름...
이라고 되어있는데, 프로그램으로 말하면 프로그램에서는 어떤 값을 메모리 주소에 몇 바이트만큼 저장할 때, 프로그래머가 해당 메모리 주소를 외우는 것보다 더 효율적으로 작업하기 위해서 해당 메모리 주소를 프로그래머가 의미를 가진 단어로 치환해 외울 수 있도록 제공하는 것. 1
예시 (둘 다 같은 의미)
0x004번 메모리 주소에 4바이트만큼의 공간에 5를 저장 |
참고 : 변수의 이름은 프로그래머가 직접 정할 수 있다. 위에서는 num이라고 선언 했지만, number, _1234 이런 식으로 정할 수 있다. 다만, 변수의 이름에서 사용할 수 없는 몇가지 제한 사항이 있다. 자세한 내용은 다음 참고
1. 특수문자는 [ _ ] (언더바)만 사용 가능.
2. 맨 앞자리에 숫자는 사용 불가
3. 문자(영어 대소문자), 숫자, 언더바만 사용 가능 3
4. C 프로그램 컴파일 순서
소스 작성(*.c) >(컴파일)> 목적파일(*.obj) >(링킹)> 실행파일(*.exe)
소스파일 (*.c)
>> C언어로 작성한 파일. main 함수가 하나 이상 있어야만 컴파일 가능
목적파일 (*.obj)
>> 소스파일을 컴파일 하면 생기는 파일. (어셈블리언어 1차 변환)
실행파일 (*.exe)
>> 목적파일에 여러가지 라이브러리를 연결(링킹)해 만든 최종 파일. Exe 파일은 윈도우 환경에서 돌아가는 프로그램 확장자 (기계어로 최종 변환)
프로그램 작성시 코드를 여러 파일에 나눠 작성하는 이유
>> 프로그램 작성시 파일을 나누게 되면 프로젝트 내에 있는 파일들이 순차적으로 컴파일된다. 만일 모든 코드를 단일 파일에 작성하게 되면 해당 파일의 한 글자라도 수정하게 되면 해당 파일을 컴파일을 진행할 때, 시간이 낭비된다. 이유는 여러 파일 중 변경된 파일만 새로 컴파일해 obj 파일을 생성하고 기존의 변경되지 않은 파일은 이전에 컴파일한 obj 파일을 재사용해 exe 실행 파일로 만들기 때문이다.
>> 따라서 소스코드를 컴파일할 때, 컴파일 시간을 줄이고 싶다면 용도에 맞게 코드를 나누어 작성해야한다. 굳이 이 이유가 아니더라도 소스코드를 용도에 맞게 나눠 작성하는 것이 나중에 유지보수하기도 쉽다.
간단히 말하면
>> 컴파일 속도의 향상
>> 성격이 비슷한 소스파일을 묶어 유지보수에 용이하도록
>> 타인에게 공개하기 싫은 소스를 라이브러리화 해 전달
5. 데이터
가장 작은 단위는 Bit, Bit 8개가 모여서 1Byte가 됨. 이후 1024개씩 모여서 차례로 KB, MB, GB, ... 으로 변환
하나의 Bit마다 2개의 상태중 하나 저장 가능 >> 현실의 배타적 상태를 저장하는 것에 굉징히 효율적
Byte : 8개의 Bit가 모여 구성되므로 unsigned char 기준 2^8개의 상태중 하나 저장 가능. << C 언어에서는 char(캐릭터) 데이터 타입 4
기본적으로 데이터 타입은 접두사를 붙여주지 않으면 signed가 가 기본이 되므로 (MSB가 부호비트로 작용) 2^7개의 상태 중 하나를 저장할 수 있다. 5
이 때, 수학에서의 숫자 개념과 혼동해서는 안되는 것이 수학은 [ 음수, 0, 양수 ] 세가지 상태의 수가 있다면 프로그래밍에서는 [음수, 양수 ( 0 포함) ] 두 상태만 있다. 이유는 MSB에서 표현할 수 경우의 수는 2가지로 3이 되면 2 Bit를 부호선택에 사용되어야해서 비효율적이기 때문이다.
일반 수학에서의 수 개념 |
음수, 0, 양수 |
프로그래밍에서의 수 개념 |
음수, 0을 포함한 양수 |
MSB의 비트값이 0이면 양수, 1이면 음수로 표현된다.
LSB는 어느 상황에서든 [ 0 ]번에 해당하지만, MSB는 해당 데이터의 크기에 따라 [ count(전체 Bit) - 1 ] 번째 순서로 불린다.
LSB |
0번 인덱스 |
MSB |
전체 Bit 길이 - 1 번 인덱스 |
6. ASCII
주요 코드 (다른 코드는 몰라도 요건 알아야 만들때 편리하다.)
DEC |
HEX |
VALUE |
0 |
0 |
NULL |
48 |
30 |
' 0 ' |
65 |
41 |
' A ' |
97 |
61 |
' a ' |
참고 : 기존 0 ~ 127에 해당하는 값을 할당받았으나 시대가 흘러서 확장형으로 ~ 255까지도 있다고 함
7. 자료형
Bulit-in Data Type
>> 사용빈도가 높은 자료형을 예약어로 제공
User-defined Data Type
>> 사용자가 Built-in Data Type을 활용해 직접 데이터 타입을 만들어 사용할 수 있는 문법 제공.
Built-in Data Type | User-defined Data Type |
char (1 Byte) Short (2 Byte) int (4 Byte) ... | struct ... typedef ... ... |
정수형 자료형
>> 정수를 저장할 수 있는 자료형으로 DEC를 BIN으로 변환한 값 그대로 사용
실수형 자료형
>> 실수를 저장할 수 있는 자료형으로 정수형 자료형을 저장하는 방법과 달리 MSB에 부호비트, 그 다음 8 Bit 혹은 11 Bit를 지수, 나머지를 가수로 사용.
>> 123.45 >> 1.2345 * 10^2 의 형식으로 지수 비트에 밑줄친 값을, 가수에 Bold체에 해당하는 값을 저장
※ 자료형 선택은 곧 메모리 자원을 절약하는 방법으로 직결되므로 무조건 큰 데이터 형을 사용하는 것이 아니라 생각해서 적절한 범위의 값을 사용.
※ 300 ~ 400에 해당하는 값을 저장할 경우 2 Byte가 필요하지만, Value - 300을 해서 값을 저장하면 1 Byte로 저장 가능. 빼내올 때는 + 300
정수 자료형 |
표현 범위 |
예시 (사용할 수 있는 영역) |
(signed) char |
-128 ~ 127 |
현재온도 (일반적 상황) |
unsigned char |
0 ~ 255 |
ASCII 문자 넣을 때 |
(signed) short |
–32,768 ~ 32,767 |
D-day 적용할 때 (32000일 = 약 87년) |
unsigned short |
0 ~ 65,535 |
도서관에 위치한 사람의 수 |
(signed) (long) int |
–2,147,483,648 ~ 2,147,483,647 |
한 집의 가계 재정상황 (일반적 상황) |
unsigned (long) int |
0 ~ 4,294,967,295 |
중국(16억)과 인도(11억)의 인구를 더한 수 |
정수 자료형의 표현 범위는
unsigned의 경우 0 ~ 2^(자료형 비트) -1까지
signed의 경우 [ -2^(자료형 비트 수 - 1) ] ~ +[ 2^(자료형 비트 수 - 1) -1 ]
- 만일 메모리 주소를 1개 2개가 아니라 몇 백 몇 천개씩 외워야 한다면 굉장히 힘들 것 [본문으로]
- 변수의 이름, 해당 변수는 컴파일러가 메모리 주소를 선택하고 프로그래머는 변수 이름만 외워두면 메모리 주소를 위우는 것보다 더 효율적으로 외울 수 있다. 의미를 부여할 수 있으니까! [본문으로]
- 사실 한글도 포함되지만, 한글은 2 Byte라서 영어로 변수명을 작성할 때보다 메모리 절약적인 부분에서 불리하다. [본문으로]
- 0 - 255, 256가지 상태중 한가지 상태 저장 가능 [본문으로]
- Most Significant Bit, 최상위 비트를 부르는 약자로서 8Bit ABCD EFGH에서 A 위치에 해당하는 비트를 말한다. [본문으로]
- Least Significant Bit, 최하위 비트의 약자로서 8Bit ABCD EFGH 에서 H 위치에 해당하는 Bit이다. [본문으로]
'외부활동 > TIPS 19th' 카테고리의 다른 글
[TIPS 19TH] 06 : 2018.07.13. (목) (2) | 2018.07.13 |
---|---|
[TIPS 19TH] 05 : 2018.07.09. (월) (2) | 2018.07.10 |
[TIPS 19TH] 04 : 2018.07.05. (목) (2) | 2018.07.06 |
[TIPS 19TH] 03 : 2018.07.02. (월) (0) | 2018.07.03 |
[TIPS 19TH] 02 : 2018.06.28. (목) (4) | 2018.06.29 |