F.R.I.D.A.Y.

[TIPS 19TH] 01 : 2018.06.25. (월) 본문

외부활동/TIPS 19th

[TIPS 19TH] 01 : 2018.06.25. (월)

F.R.I.D.A.Y. 2018. 6. 26. 02:29
반응형

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를 저장

int num[각주:2]에 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개의 상태중 하나 저장[각주:4] 가능. << C 언어에서는 char(캐릭터) 데이터 타입


기본적으로 데이터 타입은 접두사를 붙여주지 않으면 signed가 가 기본이 되므로 (MSB[각주:5]가 부호비트로 작용) 2^7개의 상태 중 하나를 저장할 수 있다.

이 때, 수학에서의 숫자 개념과 혼동해서는 안되는 것이 수학은 [ 음수, 0, 양수 ] 세가지 상태의 수가 있다면 프로그래밍에서는 [음수, 양수 ( 0 포함) ] 두 상태만 있다. 이유는 MSB에서 표현할 수 경우의 수는 2가지로 3이 되면 2 Bit를 부호선택에 사용되어야해서 비효율적이기 때문이다.


  일반 수학에서의 수 개념 

 음수, 0, 양수 

 프로그래밍에서의 수 개념 

 음수, 0을 포함한 양수 


MSB의 비트값이 0이면 양수, 1이면 음수로 표현된다.


참고 : MSB 반) LSB[각주:6]


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. 만일 메모리 주소를 1개 2개가 아니라 몇 백 몇 천개씩 외워야 한다면 굉장히 힘들 것 [본문으로]
  2. 변수의 이름, 해당 변수는 컴파일러가 메모리 주소를 선택하고 프로그래머는 변수 이름만 외워두면 메모리 주소를 위우는 것보다 더 효율적으로 외울 수 있다. 의미를 부여할 수 있으니까! [본문으로]
  3. 사실 한글도 포함되지만, 한글은 2 Byte라서 영어로 변수명을 작성할 때보다 메모리 절약적인 부분에서 불리하다. [본문으로]
  4. 0 - 255, 256가지 상태중 한가지 상태 저장 가능 [본문으로]
  5. Most Significant Bit, 최상위 비트를 부르는 약자로서 8Bit ABCD EFGH에서 A 위치에 해당하는 비트를 말한다. [본문으로]
  6. Least Significant Bit, 최하위 비트의 약자로서 8Bit ABCD EFGH 에서 H 위치에 해당하는 Bit이다. [본문으로]
728x90
반응형

'외부활동 > 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
Comments