'2015/02/06'에 해당되는 글 2건

  1. 2015.02.06 LEGO - Mindstorm #3
  2. 2015.02.06 실수의 저장방법과 scanf
Busan IT/제어기초2015. 2. 6. 17:36

완전 조립 후 센서를 활용한 로봇 만들기



반응형

'Busan IT > 제어기초' 카테고리의 다른 글

OrCAD 매뉴얼과 반파/전파 전류  (0) 2015.02.10
회로 설계 기초(회로도를 그리기 전에 알아야 할 상식)  (0) 2015.02.09
LEGO - Mindstorm #2  (0) 2015.02.05
LEGO - Mindstorm  (0) 2015.02.04
ADC와 Lego Mindstorm  (0) 2015.02.03
Posted by newind2000
Busan IT/제어언어2015. 2. 6. 17:35

실수의 저장방법과 scanf

 

#1. 컴퓨터의 실수 저장 방법

 

학습목표 - 실수를 32bit IEEE형식으로 바꿀 수 있다.

 

컴퓨터는 자료를 기억하려면 메모리의 설정이 필요하다. 컴퓨터의 메모리는 한정되어 있기 때문에 메모리를 쓰려면 기억 공간을 설정해 주어야 한다. 메모리를 확보하기 위해서 우선 1. 변수 선언을 해주어야 한다. ex) char/short/int/long/float/double

// 이 중에 실수를 저장하는 변수는 floatdouble이다.

이 때 변수는 하나 이상을 생성하게 하기 위해 이름을 넣어주어 같은 형의 변수를 구분해야 한다.

 

IEEE 형식에 따른 4byte 실수의 저장방법을 알아보자. 실수 7.25를 예를 들어 설명해 본다.

 

/*부호는 음과 양을 나타낸다. 음일 때는 1, 양일 때는 0을 갖는다.

지수부는 나타나는 값이 1.*의 형태를 갖게 만드는 지수X가 되도록 X-127이 되게 만드는 X값을 넣는다. 가수부는 1.* 형식에서 *를 넣는다.*/

!! 정규화에 무슨 수를 곱하는지가 나오도록 만들어야 한다.

 

0(부호)/00000000(지수부)/00000000000000000000000(가수부)에서

 

7.25EEEE형식으로 변환하면

1. 부호는 양수 임으로 ‘0’

2. 72진수로 바꾸면 111(2)이고 소수점 이하 자리 0.252진수로 바꾸면

 

0.25 * 2 = 0.5 -> 0

0.5 * 2 = 1.0 -> 1

 

11101을 합치면 111.01이다. 1.* 형식에서 111.01으로 바꿔주려면 2칸 앞으로 이동해야 하기 때문 22승이 되어야 하고 X - 1272가 되게 하는 X129이므로 이것을 2진수로 고치면 10000001이다. 이것을 넣어주면,

 

0(부호)/00000000(지수부)/00000000000000000000000(가수부)

 

0(부호)/10000001(지수부)/11010000000000000000000(가수부)

 

nibble로 나누어 16진수로 표현하면

 

0100/0000/1110/1000/0000/0000/0000/0000

40 / E8 / 00 / 00

A / B / C / D 인데 Big endian 방식임으로

 

D / C / B / A 가 되기 때문에 값은 00 00 E8 40 이 된다.

 



 

 

#2. scanf의 개념과 사용

 

//Double형은 float형의 두 배의 용량을 가짐으로 지수부와 가수부가 영역이 늘어난다.

 

컴퓨터의 입력에 대하여 알아본다.

 

출력(output) - printf

입력(input) - scanf

 

우리는 대표적인 출력 명령어인 printf를 배웠고 이 시간에는 입력의 대표적인 명령어인 scanf에 대해 알아본다.

 

모든 값이 고정되어 버리면 수정 작업이 힘들다. 프로그램의 유연성을 위해서 scanf를 쓴다.

 

scanf의 입력방법

 

scanf("표현형식“, 입력할 곳의 주소); 를 입력하면 된다.

 

실습 - 양의 정수를 넣으면 해당 정수의 구구단이 표현되는 프로그램을 코딩해라)

 



/*간단하게 짤 수 있지만 지난 시간에 배운 것을 종합하여 iNum2를 추가하여 짜보았다.

처음에 구구단 코딩을 하면서 헤맸던 이유는 printf의 체계에 대한 정확한 구조를 이해하지 못해서이다. printf("변수를 표시할 형식 or/and 표시할 단순 정보“, 표시할 형식을 표현할 변수);

추가적으로 scanfscanf("변수를 입력할 형식“, 변수); scanf에서 변수를 입력할 형식은 변환 시켜서는 안된다.

*/

 

 

#3. array 배열

 

같은 이름을 쓰면서 여러 개의 자료를 확보하기 위해서 쓰는 것이 array이다.

 

int Smart[5];를 쓰면 20바이트가 확보된다. 뒤에 [정수]를 해당 형식에 곱을 한 만큼의 개수가 생성되기 때문이다.

 

int Smart[5]; 를 생성하여 주소를 확인해 보면 Smart[0] ~ Smart[4]가 생성되는 해당 주소는 연속으로 붙어있다는 것을 확인할 수 있다.

 

이 때 Smart[2]로 변수선언명령어에서 생성 변수 숫자를 바꾸면 run time error가 난다. 이것은 코드를 잘못 짰다는 표시이다. 때문에 배열을 선언할 때 주의를 해야 한다.

 

C는 직접적으로 CPU와 의사소통을 하기 때문에 잘못된 코딩을 하면 CPU에 영향을 줄 수 있다.

 

실습 - Array 배열)

intchar형식의 변수 여러 개를 선언한 후 값을 넣고 출력해 본다.



 

#4. 문자열 출력

 

문자열(string)을 사용하는 방법을 배운다. 끝에 0이 있으면 문자열이라고 부르고 끝에 0이 없으면 문자 배열(character array)이라고 한다.

 

실습 - 문자열)

character함수 5개를 만들어 문자열을 출력해 본다.

//문자열 출력 표시는 %s이다. ‘s'string의 약자이다.


 

출력 양식에 ‘%s'넣은 후 출력하면 0이 나올 때까지 옆에 있는 자료를 지속적으로 출력한다.

 

문자배열을 쉽게 넣을 수 있는 방법은 큰 따옴표를 써서 연속된 숫자를 적어 주는 것이다. 여기서 주의할 점은 변수의 개수 -1개의 값을 넣어주어야 한다는 것이다. 마지막의 입력값은 0이 되어야 하는데 4개만 넣어주면 컴파일러에서 자동으로 마지막 문자를 0으로 처리하기 때문이다.

 

실습 - 문자열 값 끝에 자동적으로 “0”이 추가되는지 확인해 보고 한글 이름도 출력해 본다.


 

 

반응형
Posted by newind2000