안녕하세요 stimpack 입니다.!    


오늘은 포인터에 대해서 알아보는 시간을 갖도록 하겠습니다.! 


포인터를 배우기전 우리는 자료형과 변수를 선언함으로써 메모리에 데이터를 저장하거나 읽었습니다.! 


사용한 변수들은 컴파일을 통해 메모리 주소로 바뀌어서 사용되었습니다.


이렇게 주소를 저장하는 방식을 직접 주소 지정 방식이라고 합니다.!


사용자가 직접 변수를 선언함으로써 컴파일러에게 주소를 기억해! 라고 명령하는 것과 같습니다.


직접주소를 지정하는 방식에는 한계가 있습니다.


     


(메모리주소는 임의 주소입니다)

위에 소스를 보시면 빌드시 실패한 것을 알수 있습니다.  


error를 보시면 'pack': 선언되지 않은 식별자 입니다. 라고 나옵니다. 이것은 main함수에서만 선언되고 stimpack 함수에서는 선언되지 않았기에 


컴파일러가 main함수를 시작으로 stimpack 함수의 호출로 인해 컴파일시 pack라는 변수가 stimpack 함수안에서 선언되지 않았기에 에러를 


표출하게 됩니다.


즉 pack 변수는 main에서 선언된 지역변수이기 때문에 c언어 문법적으로 다른 지역간에 호출은 불가합니다.! '



물론 매개변수를 이용하여 함수를 호출한다면 main함수에서 선언한 pack변수를 사용하여 값을 변경할수 있습니다.


하지만 pack를 다시 초기화하려고 하면 지역변수이기 때문에 안됍니다..



이때 직접 주소 지정방식에 한계를 느끼게 됩니다 .! 


그래서 사용할수 있는 간접 주소 지정 방식 포인터를 사용하시면 됩니다. ! 


포인터란



예를 들어 우리는 목욕탕을 갔습니다. 주인은 38번 사물함 열쇠를 주고 우리는 38번열쇠를 보고 38번 사물함으로 이동합니다.


즉 여기서 포인터의 역할은 38번 열쇠와 같습니다.! 


우리가 직접적으로 38번 사물함을 가는 것은 좀전에 설명한 직접 주소 방식 (일반 변수) 와 같습니다. 


하지만 C언어 문법상 우리는 다른 함수에서 선언된 변수는 사용하지 못하는 문제가 있었습니다. 


하지만 간접적으로 사물함의 열쇠를 가지고 접근한다면 다른 함수내에서도 사용할수가 있게 됩니다.! 



이렇게 포인터를 사용하여 main함수에 있는 지역변수 pack를 stimpack 함수에서 값을 변경할수 있게 되었습니다.! 



메모리상 보시면 포인터 변수는 pack의 주소를 가르키기 때문에 stimpack 변수에서 포인터를 이용하여 값을 변경할수가 있게됩니다. 


(여기서 포인터 변수의 크기가 4byte 인 이유는 32bits 운영체제에서 사용하는 주소의 크기는 4byte 이기 때문에 기본적으로 가르키는 대상의 주소를 


저장하려면 4byte로 할당됩니다. )


포인터 문법은 


가르키는 대상의 자료형 * 포인터변수이름 으로 구성되어 있습니다. (ex short *ptr ;) 


예를 들어 


int stim =10 ;


int *ptr ;


ptr = &stim ; ( & 이 연산자는 해당 변수의 주소값을 나타내는 연산자 입니다. 즉 ptr 포인터 변수에 시작주소를 저장하겠다)


(이렇게 사용하고  위에 두줄은 int *ptr = &stim;  이렇게 줄여서 사용할수도 있습니다. )


여기서 포인터 변수는 두가지의 의미를 가질수 있습니다.


*ptr   ptr  


*ptr은 가르키는 대상의 값을 뜻합니다. 


ptr은 가르키는 대상의 변수의 값을 (시작주소) 바꾸겠다는 뜻입니다.


그래서 위에 ptr = &stim; 이라고 사용한게 시작주소를 stim의 주소로 저장한다는 뜻 입니다.





여기서 ptr = &stim 즉 ptr변수가 가르키는 시작주소는 stim의 주소 (0x0010001)을 포인터 변수에 저장한다는 뜻입니다.


*ptr은 가르키는 대상 즉 stim의 값을 변경한다는 뜻입니다. 



이렇게 포인터 변수를 이용하여 주소값을 바꿀수도 있고 가르키는 대상의 값도 바꿀수있습니다.!





  안녕하세요 stimpack 입니다.!    


오늘은 배열에 대해서 알아보는 시간을 갖도록 하겠습니다.! 



  안녕하세요 stimpack 입니다.!    


오늘은 제어문, 조건문, 반복문에 대해서 알아보는 시간을 갖도록 하겠습니다.! 


드디어 재미있는 제어문 시간이 왔습니다.! 전에 2회차에서 함수를 설명하면서 자판기를 예를 들었습니다.


2019/01/02 - [C_Language] - 20th Tips Programming 2회차 -20181231


이처럼 하나의 프로그램을 만들때 꼭 필요한것이 제어문 입니다.! 


우선 제어문이란 프로그램의 실행 흐름을 제어하는 문법입니다!. 


C 언어 문법에서는 조건을 명시하여 제어하는 (조건문)과 특정 명령을 반복하는 ( 반복문)을 통해 프로그램을 제어할수 있습니다.! 


예를 들어 블로그에 글을 써! 라고 명령을 한다면 


컴퓨터의 전원을 ON 한다. 

Tistory를 검색한다. 

로그인을 한다. 

새로 글쓰기를 눌른다. 

오늘의 공부를 적는다. 

쓴 글을 저장한다. 

로그아웃을 한다. 

컴퓨터 전원을 OFF한다. 


공부는 매일 하니깐 이것을 반복하면 되겠죠!? 이처럼 일반적으로 우리는 말을 엄~~~청 생략하고 있습니다.! 


그래서 어떤 행위나 작업을 분할하여 생각하는 연습이 필요하다고 생각합니다.! 왜냐하면 우리는 머리가 좋아서 


너무나 많은 말을 함축하여 표현합니다.! 


이처럼 우리는 재미있는 프로그램을 얼마든지 만들수 있습니다.! 


1. 조건문 


조건문은 조건수식을 넣고 명령을하는 간단한 문법입니다.! 


if(조건수식) 명령문 ; 


명령문 1  int data = 4 ; 

조건수식 data>3  

명령문 2 printf("data는 3보다 큽니다")

명령문 3 printf("작업완료") 




위 예제는 참이여서 명령문 1 ,2 ,3 모두 실행됩니다.



하지만 조건이 거짓이라면 명령문 1 ,3만 실행됩니다. 


그래서 if~ else 문법이 있습니다.


명령문1 ; 

if (조건수식) 명령문 2 ;

else 명령문 3 ;

명령문 4; 



위에 예제는 거짓일 경우 명령을 어떻게 실행하는지 보겠습니다.


명령문 1  int data = 2; 

조건수식 data>3  ;

명령문 2 printf("data는 3보다 큽니다");

명령문 3 else printf("data는 3보다 작습니다") ;

명령문 4 printf("작업완료") ;


data의 값이 3보다 작기때문에 명령문 1,3,4가 실행되었습니다.


만약 참이였다면 1,2,4가 실행됩니다.! 


이처럼 조건의 예외처리를 할수있습니다.! 간단하기 때문에 많이 사용됩니다.!




  안녕하세요 stimpack 입니다.!    


오늘은 연산자에 대해서 알아보는 시간을 갖도록 하겠습니다.! 


우리는 어릴적 부터 연산자에 대해 많이 접했습니다.! 


(덧셈, 뺄셈 ,나눗셈 , 곱셈 ...등등.) 


기억나시나요!?  = <- 이것을 말입니다!. 이 부호는 같다라는 뜻도 있지만 대입한다는 뜻도 있습니다. 


이처럼 동음이의어 (소리는 같지만 뜻이 다른 낱말입니다) . 예를들어 배도 사람의 배도있고 바다에서 타고다니는 배도 있고,

 

과일 배도 있습니다..!! 이처럼 우리는 상황에 따라서 낱말의 뜻을 이해할수 있습니다.! 하지만 컴퓨터는 상황을 판단할수 없어서 


명확한 한개에 의미만 인식시켜야 합니다.! 그래서 자주~ 사용하는 뜻으로 약속하기로 합니다.! 


우선 1. 대입 연산자.! 


* c언어에서는 = 기호를 변수에 상수값 또는 다른 변수 값을 대입할 때 사용합니다. ! 


그럼 같다는 어떻게 표현할까요!? == 이렇게 두개를 사용함으로써 표현합니다.! (관계연산자로써 이따 다시 애기하겠습니다) 


2. 산술 연산자!


+ : 더하기 연산자

-  : 뺄셈 연산자

*  : 곱하기 연산자

/  : 나눗셈 연산하고 몫을 구하는 연산자

% : 나눗셈 연산하고 나머지를 구하는 연산자


3. 증감 연산자  

++ : 증가 연산자

--   : 감소 연산자 


이처럼 한개에 메모리가 연산에 사용된 연산을 단항 연산자라고 합니다! 


만약 int stim +2 ; 라고 했다면 두개의 메모리를 사용함으로 이항 연산자라고 합니다! 


4. 관계 연산자


두 수치의 값의 관계를 비교하여 그 결과 값을 진릿값 ( 참1 , 거짓0)으로 표현하는 연산자 



쉽게 왼쪽을 기준으로 생각하시면 편합니다! 


5. 논리 연산자


A와 B를 일정한 규칙 (논리곱 AND &&   , 논리합 OR || , 논리부정 NOT !) 으로 연결해 주는 연산자 이며,


 진릿값(참 0이아닌값 , 거짓0)


쉽게 논리곱은 하나라도 거짓이면 거짓이고 , 


논리합은 둘다 거짓이어야 거짓이고 , 하나라도 참이면 참입니다.


논리부정은 A가 거짓이면 참 , 진실이면 거짓입니다.! 반대로 생각하시면 됩니다. 






  안녕하세요 stimpack 입니다.!    


오늘은 표준입출력 함수에 대해서 알아보는 시간을 갖도록 하겠습니다.! 



*표준 출력 함수 


우선 표준 출력 함수에 대해서 알아 보겠습니다.



우선 맨위에 보이는 #include <stdio.h> 에 대해서 알아 보겠습니다.!


#include 란 전처리기라고 합니다! 


컴파일 하기전에 컴파일러에게 직접적으로 명령하는 것 입니다. 


include란 포함하다는 뜻으로 옆에 <stdio.h>을 포함해서 컴파일 하라는 뜻입니다. 


여기서 <stdio.h>란 Standard Input Output Header  표준 입출력 함수란 뜻 입니다.


이로써 우리는 printf, putchar, putc, puts 등 입출력 함수를 사용할수 있게 됩니다.! 


문득 보면 이런 입출력함수가 c언어 문법 같지만 사실은 함수로 만든것 입니다!!! 


자세한 내용은 따로 내용을 만들겠습니다!. 


간단하게 말하자면 putchar, putc 는 단일 문자 출력함수 입니다.!


이걸 기반으로 printf 함수를 만들었습니다!!


puts 는 문자열 출력함수 입니다. 이 함수를 사용하면 자동으로 줄바꿈이 일어납니다. 



예제로 한번 작성하였습니다. 


putchar는 단일 문자 출력 함수로써 제가 문자 'A'를 입력하여 A를 호출하였고 


제가 65를 적어서 컴파일러는 아스키코드로 대문자 A를 출력하였습니다. (아스키코드 A = 65) 


Hello~! stimpack이 줄바뀜 없이 바로 이어서 나왔습니다.


하지만 puts 와 자리를 바꿔서 입력하니 줄이 자동으로 바뀌어서 출력 된 것을 확인 할수 있습니다! 


만약 printf함수를 사용시 \n 라는 제어문을 사용하시면 줄바꿈을 사용하실수 있습니다. 


printf 함수를 사용할때 변수에 저장된 문자나 숫자를 출력할수 있습니다.! 출력하기 위해서는 프로그래머가 어떤 서식으로 출력할 것인지 결정해야 합니다!


 

이렇게 형식을 잘못 적으면 이상한 값이 나오게 됩니다! (이것은 약속이니 꼭 지켜주셔야 합니다!)





문약에 변수 2개이상에 내용을 출력하고 싶으시면 순차적으로 적으시면 됩니다! 





  안녕하세요 stimpack 입니다.!    


오늘은 상수와 변수 , 그리고 함수에 대해 알아보는 시간을 갖도록 하겠습니다.! 


*변수

변수란 무엇일까요 .!? 


변수란 쉽게 말해 데이터를 저장하는 그릇이라고 생각하면 됩니다. 즉 제가 물컵이라고 하면 물컵이 되고 밥 그릇이라고 하면 밥그릇입니다.! 


저장되는 데이터에따라 그 그릇의 역할은 바뀌겠죠!  즉 변할수 있습니다.

 

예를 들어 

제가 int stimpack ; 라고 선언하고 밑에 stim이라고 적으면 비쥬얼스튜디오가 똑똑하게 제가 만든 변수를 알려줍니다.! 


즉 컴파일러에게 내가 사용할 자료형을 선언하고 (int) 제가사용할 그릇 ,즉 변수이름을 지어서 만들어주면 4byte 크기의 메모리가 생기게 되고 


하나의 그릇이기 때문에 우리는 이것을 알기위한 고유의 주소가 필요합니다! 하지만 변수이름을 지어줌으로 써 우리는 주소를 몰라도 되고, 컴파일러만 알


게 됩니다.


그러면 우리는 굳이 주소를 알지 못해도 변수 이름을 선언함으로써 위에 같이 그 이름만 적으면 우리는 언제든지 그 변수에 접근할수 있게 됩니다! 



제가 아까와 같은 예제에 int stimpack 라고 선언하고 , 변수 stimpack의 값을 5라고 정의하였습니다. 


밑에 메모리2라고 적힌 창에 0x001efcd0 이렇게 써있고 cc cc cc cc cc cc cc cc 적혀있습니다.


 0x001efcd0 이게 stimpack의 주소값 입니다!. 너무 길고 어렵네요...나중에 변수를 많이 선언 할수도 있는데 주소를 다 외운다는 것은 어려운 일이겠죠! 


그래서 컴파일러와 약속을 합니다! 내가 변수를 만들면 컴파일러가 주소값을 알고있으라고요. 너무 기니깐..


이전에 자료형에 대해서 정리를 했는데 , 변수를 선언할때 자료형을 선언하고 변수 명을 적어주는 이유가 !! 


 *즉 int (4byte) 만큼의 크기를 가진 , stimpack(변수)를 만들어줘! (변수의 주소는 너가 알고있어!! (0x001efcd0 ) 



그러면 제가 만든 변수에 cc cc cc cc cc  (쓰레기값이라고 합니다 뭐가 들어있는지는 아무도 몰라용)  5라는 값이 정의 (초기화) 됬다고 합니다. 


05 00 00 00 지금 이렇게 빨간색으로 적힌게 제가 자료형의 크기를 int로 했기 때문에 4byte 만큼의 크기가 할당된 것 입니다.

 

**tip) 이것은 디버깅이라고 하는 함수의 오류가 있는지 없는지 확인하는 것입니다. 메모리창은 꼭! 디버그상태(F5누르시면 디버그상태입니다.) 에서 디버그 -> 창 -> 메모리 (art + 6) 입니다. F10을 누르면 화살표가 이동하면서 한줄 한줄 컴파일하게 됩니다. 


주소: 에 반드시 &연산자를 꼭 사용하시고 변수명을 적으셔야 접근합니다.! .



*상수


상수(Constant)는 무엇 일까요.!?


상수는 변수와 다르게 변하지 않고 컴파일러와 내가 알고있는 고정된 정보입니다.


상수는 숫자형상수 , 문자형 상수 , 문자열 상수로 크게 3가지로 나누어 집니다.




*함수 


함수하면 가수 f(x) 님들이 생각나네요.. 죄송합니다  


함수란 쉽게 작은 프로그램이라고 생각하시면 됩니다! 




위에 자판기가 있습니다. ! 저는 커피 물 사이다를 선택할수 있습니다. 


위 자판기를 함수로 표현하면 


음료수 사먹기 (자판기) 

{

돈을 넣는다.

음료수를 고른다.

음료수를 선택한다.

잔돈을 반환한다. 

음료수를 먹는다.  


}


함수명은 자판기!  자판기의 매개변수 인자가 돈이 되고 , 음료수가 결과값 (반환값)이 됩니다! 


(여기에서 함수명을 지어주어야 하는데 함수명을 잘 지어야  다른 프로그래머가 봐도 어떤 기능을 하는지 유추할수 있습니다.!)

이처럼 어떤 특정 기능을 만들기 위해서는 함수 이름이 필요하고 , 어떤 매개 변수를 사용할것인지 명시하고 , 그 다음 작업내용 그리고 그 결과를 


나타내는 결과 값으로 이루어져 있습니다.!



쉬운 예제로 SUM이라는 함수를 만들어 보았습니다.



여기서 함수는 main 과 SUM 입니다. 


우리가 어떤 기능을 하는 프로그램을 만들때 중요한 것은 어디서 부터 시작될지가 중요합니다. 


그래서 우리는 약속했습니다. 


* main 이라고 적은 함수가 시작함수라고 모두와 약속을 한 것입니다!.  

 

좀더 자세한 이해를 위해 디버깅을 하면서 메모리에 접근하여 알아 보겠습니다.


 디버깅을 하면서 어떻게 컴파일러가 함수를 읽는지 보겠습니다.


말했다싶이  main함수먼저 읽습니다.



제가 선언한 stimpack을 보니 아직 쓰레기 값이 들어있는 것을 알수 있습니다.



제가 SUM함수를 호출하였기 때문에 main함수는 (caller 호출자)라고 합니다. 화살표처럼 SUM함수를 보고 컴파일러가 SUM 함수로 매개변수 5와 3을 순차적으로 대입합니다. SUM 함수는 main함수에 부름을 당했기 때문에 (callee 피호출자 )라고 합니다.


SUM함수의 연산을 끝낸 후 그 값을 int stimpack 메모리에 넣어줍니다. 그래서 메모리를 실제로 보면 컴파일러는 자료형이 int이기 때문에 4byte 크기에 stimpack 변수에 접근하여 쓰레기 값에서 연산한 8이라는 값을 초기화 해줍니다.!  



마지막으로 printf 표준입출력 함수를 통해 제가 원하는 문구와 결과가 출력됩니다.! 





안녕하세요 Stimpack 입니다. ! 이어서 1회차 강의 내용 정리를 하겠습니다. 


*우선 Program이란 무엇일까요?! 


프로그램이란 어떤 목적을 위한 일의 진행 순서라고 할수 있습니다. 미리 쓴다 라는 뜻의 라틴어에서 유래 되었습니다. 

예를 들어 Tv 프로그램 . 음악회 프로그램 등 어떤 방송의 순서라던지 음악회의 연주 순서 등 일의 진행 순서라고 보시면 됩니다. 


그렇다면 우리는 Program을 만들기 위해 컴퓨터를 사용합니다. 컴퓨터는 기계어라는 0과 1로 이루어진 이진수를 사용합니다. 


프로그래머는 기계어를 알기에는 너무나도 광범위하기에 프로그래밍 언어라는 것을 사용합니다(  c언어 , c ++ ,Java ,c #...등)


*즉  컴퓨터는 기계어를 사용하고 프로그래머는 프로그래밍 언어를 사용하게 됩니다. 



 

저 Stimpack은 기계어를 모르기 때문에 Compiler라는 친구에게 도움을 받습니다. 이 친구는 프로그래밍 언어를 기계어로 번역해 주는 역할을 합니다! 


그렇기 때문에 우리 프로그래머는 기계어를 몰라도 컴퓨터에게 전달하고 싶은 말을 할 수 있게 됩니다.! 


하지만 모든 언어에서는 문법이 있듯이 프로그래밍 언어에서도 문법이 존재하게 됩니다.! 이것은 컴파일러와의 약속이며 어기면 컴파일러가 인식을 


못하여  컴파일을 실패하게 됩니다.


앞으로 우리가 배울 프로그래밍 언어는 C언어이기 때문에 C언어에 대해서 알아 보겠습니다. !


C언어 이전에는 b언어라는 언어가 존재했습니다! (갑자기!?..) 


켄톰슨과 데니스 리치라는 개발자가 운영체제를 만들고 싶어 했습니다! (이때는 운영체제들은 하드웨어 종속적인 언어를 사용하여 개발되었기 때문에 하드


웨어가 바뀌면 이에 따라 운영체제를 다시 개발해야 했다.)


새로운 운영 체제를 만들기에는 b언어로서는 부족했습니다. 그래서 이 둘이 새로운 언어를 만들게 되는데 1972년에 C언어라는 새로운 언어를 개발하여 이


를 사용하여 UNIX 라는 새로운 운영체제를 만들게 되었습니다~~ ! c언어는 이처럼 개발자들이 만들었기 때문에 어떤 언어보다도 개발자의 입장에서 만들


었기 때문에 구조화되었고 이식성 , 생산성 , 확장성을 갖춘 언어 입니다.  


우리는 이미 많은 곳에서 c언어를 사용한 것들을 볼수 있습니다. 운영체제. 전자 계산기 .. 등등 주변에 보이는 많은 것들이 c언어를 사용하여 만들었다고 보


시면 됩니다!


전자 계산기를 예를 들어 보면 C언어가 가지는 구성들을 쉽게 이해 할수 있습니다.



C언어는 입력 , 출력 , 상수 , 연산자 등을 가지며 17이라는 값이 나왔을때 15 + 2 를 기억해야할 공간을 변수라고 표현합니다. 


이처럼 계산기를 보면 C언어의 기본적인 구성을 이해할 수 있습니다.


C언어의 서술 형식에 대해 설명하겠습니다.


* C언어의 기본 서술 형식  


* C언어의 기본 서술 형식


1.단일 서술문 (Single Statement) 은 논리적 최소 명령 실행 단위 입니다.  

  예를 들어 


 stimpack = stimpack + 27 ;


stimpack = 

              stimpack +27 ; 


이처럼 하나의 서술문을 단일 서술문이라고 합니다. 


2. 복합 서술문(Compound Statement) 은 여러개의 단일 서술문을 중괄호 { } 로 묶은 것을 복합 서술문이라고 합니다 . 


{

stimpack = stimpack +27 ; 

stim = pack +2018;

}

여기서 나오는 ;(세미콜론)은 문장 분리자 라고 생각하시면 됩니다. 명령을 구별해 주는 역할을 합니다. 


3. 수식 서술문

4. 조건 서술문

5. 반복서술문 

6. 라벨 서술문 

7. 분기 서술문 

8. 주석문 등등.. 이 있지만 나중에 알게 되니 pass!  



* c언어를 이용하여 프로그램 C프로그램 실행파일 만들기! 




메모장의 형식은 .txt 입니다. 그렇다면 c언어의 파일 형식은 !? .c 파일 입니다. 



이처럼 *.c 파일을 소스파일 이라고 하고 *.obj를 목적파일 *.exe를 실행파일이라고 합니다. 



우선 컴파일러가 c파일을 컴파일하여 .obj라는 목적파일을 생성합니다. 링커가 목적파일을 링크하여 실행파일을 만들고 이러한 과정을 build라고 합니다. 


우선 stimpack이라는 프로젝트를 만들고 stim.c 라는 소스파일을 만들었습니다. 그런다음 Debug라는 폴더에 들어가시면 위에서 설명한 obj 파일과 exe 파일을 보실수 있습니다. 이렇게 파일을 생성한 과정을 build! 라고 합니다! 

왜 한번에 exe 파일을 만들지 않고 왜 목적파일을 만들고 exe파일을 만드는 걸까요? (다음회차에 정답을 올리겠습니다) 




* 자료형 (들어가기전)


컴퓨터는 주로 어떻게 데이터를 저장할까요??


컴퓨터의 저장장치는 크게 주 기억장치와 보조 기억장치로 나눌수 있습니다. 


주 기억장치는 RAM 이라고 하고 보조 기억장치는 HDD , SSD  .. 등이 있습니다. 보통 메모리라고 하면 RAM을 의미 합니다.


 

 

 

 

 

 

 

 

 

 

 

보통 메모리는 이렇게 표현하며 , 운영체제가 관리하는 최소한의 단위를 1byte라고 하고 , 1byte는 8개의 bits로 구성되어 있습니다.! 


즉 제일 작은 단위는 1bit라고 하며 8개의 bits들이 모이면 1byte라 합니다.


*즉 운영체제가 관리하는 최소한의 단위를 1byte 0이나 1을 나타내는 하나의 숫자를 1bit라고 합니다. 이것이 컴퓨터가 처리하는 정보의 최소 단위 입니다.


컴퓨터는 기계어를 사용한다고 했는데 0 .1 을 사용며 이를 2진수라고 합니다. 우리가 사용하는 0~ 10~ 11~ 20 ..이를 10진수라고 합니다. 

 

옛날에는 컴퓨터를 군사용 목적으로 개발했는데 0은 스위치 off 1은 스위치 on!을 의미했습니다.(2진수의 역사.)

이를 통해 정보를 전달했습니다. 


그래서 Debug라는게 오류를 확인하고 해결하는 것을 Debug라고 하는데 옛날에 전구를 이용한 컴퓨터를 사용할 적에 전구에 나방이나 벌레들이 붙어서 


전원이 단락되어 오류가 생겼었는데 이때 벌레를 없앤다는 뜻으로 Debug라는 말을 사용했는데 이게 유래되어 지금도 Debug라고하고


실제로 비쥬얼스튜디오에서 디버그라는 언어를 아직도 사용하고 있습니다. 


다시 돌아와서 한 bit에 표현할수있는 경우의 수는 2가지입니다 0이거나 1 . 메모리가 8bits이니깐 2^8 = 256가지 입니다. 


즉 1byte에 표현할수 있는 수는 256가지가 됩니다.


저장공간이 2byte이면 16bits로 2^16 = 65,536  저장공간이 4byte이면 32bits로 2^32 = 4,294,967,296 입니다. 


1000m는 1Km라고 표현합니다. 데이터에서는 한개의 공간이 2개의 경우의수를 넣을수 있기때문에 2^10 =1,024byte입니다. 


1,024byte = 1KB , 1,024KB = 1MB , 1,024MB = 1GB , 1,024GB = 1TB , 1,024TB = 1PB , 1,024PB = 1EB 입니다! 


* 즉 32bits를 사용한다면 2^32 = 4,294,967,296 이므로 4GB의 메모리가 필요합니다.! 


컴퓨터는 0, 1 이렇게 두개의 숫자를 사용한다 했는데 , 그럼 음수는 표현 못하는 걸까요?! 


만약 -1, 0 ,1 을 사용하게 되면 데이터를 2bit를 사용해야합니다. 왜냐하면 1bit에 들어올수 있는 수는 두가지 뿐이니 2bits를 사용해야합니다. 


우리는 빠른 속도를 원합니다! 그렇기 때문에 부호비트라는 것을 사용하여 음수를 표현합니다.


       2^7 = 128             2^6 = 64           2^5 = 32           2^4 = 16             2^3 = 8            2^2  = 4               2^ 1 = 2           2^0 =1

부호비트는 맨 최상위에 있다고해서 최상위 비트라고도 합니다! 8bits중 한 bit를 부호를 사용하는데 할당 했기 때문에 나머지 7bits에만 데이터를 


사용합니다.


*즉 2^7 = 128 가지의 경우의 수가 있지만 양수일 경우 0~127 (128개 0부터 숫자를 세기 때문에) , 음수일 경우는 (-128 ~ -1) 입니다. 



     

부호가 있는 자료형 -128 (-128~ -1)

부호가 없는 자료형 128 (2^7 = 128 , 나머진 다 0)


부호가 있는 자료형 -1 (-128~ -1) 

부호가 없는 자료형 255( 128 + 64 + 32+16+8+4+2+1)



*자료형


만약에 제가 다른사람한테 택배를 보낸다고 했을때 둘중 어떤 박스가 더 효율적일까요!? 


물론 큰게 외관적으로 엄청나게 많은 선물이 들어 있을 것 같고 , 비싸보이는 효과까지 있겠지만 .. 딱 맞는 박스를 사용하는 것이 더 좋습니다!


 (큰 박스를 선택하면 비용도 더 나가겠지만 택배차량에 그만큼 박스들을 못 싣게 됩니다.)


이처럼 데이터도 동일합니다! 일정한 데이터는 적절한 크기의 메모리에 저장해야 합니다.! 


자료형(data type) 은 숫자(정보 data )를 일정한 크기의 메모리에 저장된 정보(자료)를 해석하는 형식입니다! 즉 컴퓨터에게 어떤 크기의 메모리에  


할당할 것인지 알려주는 약속(문법) 입니다.! 


C언어는 사용빈도가 높은 자료형을 예약어로 제공하고 , 나머지는 사용자가 정의해서 사용할수 있는 (User-defined Data Type)으로 크게 나누어집니다.


예약어로 제공된 자료형은 크게 두가지로 나눕니다. 


부호의 유무 중 괄호 친 것은 생략이 가능합니다. 


즉  char a = 5 ;  의 단일 서술문을 작성한다면 signed char a = 5  ; 랑 동일합니다.!


여기에서 자료형이 의미하는 것은 즉 내가 사용할 메모리의 크기를 컴파일러에게 미리 알려주는 것입니다. 


나는 1byte의 크기의 a라는 변수를 사용할거야 !라고 하면 컴파일러는 a라는 변수에 접근하여 1byte의 크기를 할당하여 여기에 5를 저장합니다. 








안녕하세요 운좋게 이번에 20기 tips 교육에 선정된 stimpack 입니다. ! 


앞으로 특별한 임무와 함께 강의에서 배운 것들을 블로그에 정리를 할 것입니다. 


programming에 앞서 우선 프로그래머가 갖추어야 할 요소에 대해서 한번 알아 보겠습니다. 


프로그래머는 끊임없는 자기 계발 , 분명한 목표의식 , 창의력 ! 이렇게 세가지가 필요하다고 하지만..


 저는 한가지 더!! 호기심이 필요한 생각합니다. 


호기심이 있어야 목표의식도 자기계발도 창의력도 생길수 있다고 생각합니다 흐흐 .. 그렇기 때문에 앞으로 저는 


왜!!!?!!WHY!? 라는 의문을 가지며 C 언어를 공부해 보도록 하겠습니다. 


사실 아직 뚜렷한 목표의식은 없습니다.! 사실 아직 많이 부족해서 어떤게 좋고 어떤게 재미있는지 아직 잘 모르기 때문에.. 일단 최선을 다해서 해보도


록 하겠습니다. 


오늘도 Stimpack~!   




+ Recent posts