728x90

2014.03.10 수업 ver1_0a.docx

 

 

 

2014. 03. 10 수업 및 과제 


1. 키보드로부터의 데이터 입력과 C언어

 

 

1.1 scanf() 

Standard input/output

stdio.h       standard input 약자

입력 함수:scanf()

출력 함수:printf()

 

1.2 scanf(A, B, C) 

메모리 공간 필요(2번째 이후 B, C)

& -> ampersand/주소 연산자 

scanf("%d", &iNum);

 

[예제]

 #include <stdio.h>
int main()
{
  int iNum1, iNum2, iNum3;
  int iResult1, iResult2, iResult3, iResult4;

  printf("첫번째 정수입력:");
  scanf("%d"&iNum1);
  printf("두번째 정수입력:");
  scanf("%d"&iNum2);
  printf("세번째 정수입력:");
  scanf("%d"&iNum3);
  
  iResult1=(iNum1-iNum2)*(iNum2+iNum3)*(iNum3%iNum1);  
  iResult2=iNum1-iNum2;
  iResult3=iNum2-iNum3;
  iResult4=iNum3%iNum1;  

  printf("iNum1(%d)-iNum2(%d)= %d\n", iNum1, iNum2, iResult2);
  printf("iNum2(%d)+iNum3(%d)= %d\n", iNum2, iNum3, iResult3);
  printf("iNum3(%d)%%iNum1(%d)= %d\n", iNum3, iNum1, iResult4);

  printf("연산결과 = %d\n", iResult1);
  return 0;
}

 

 

2. 정수와 실수의 표현방식

2.1 MSB(Most Sifnificant Bit):최상위 비트

2.2 실수의 표현방식(IEEE 표준 규약)

     

→실수는 소수점을 포함한 수

  실수는 float형, double형 long double형이 있다.

※실수형의 단위 알아보기

<결과>

 

float형의 저장방법

→float형은 IEEE754 저장방식을 이용한다. 여기서 IEEE는 ‘미국 전자전기 학회’를 뜻한다. 즉, IEEE에서 지정을 하면,     그것이 표준이 된다.

→float 형은 4byte (32bit) 이다.

1byte ☞ 1비트의 부호비트(signed bit)와 8비트의 지수부(expotent part),

3byte-1bit ☞ 23비트의 소수부(mantissa part)로 구성.

※지수부(승수)를 계산 할 때는

승수+127(바이어스)를 해준다. 값을 8bit에 넣어준다. 범위는 -128~127까지이다.

※소수부는 1010 1111 1100 1000.1010 1011의 숫자에 정규화를 하여

1.010 1111 1100 1000 1010 1011 로 만든 다음 정수는 항상 1이기 때문에 정수를 제외한 소수부분 23자리를 소수부에 입력해준다.

 

부동 소수점의 저장 방식에 대하여

float 형은 4byte IEEE 754 규약을 따름

  IEEE 754에 따르면 실수형 데이터타입의 대표적인 float형의 저장 방식

float형의 데이터의 메모리 내 저장 방식

부호비트

지 수 부

가 수 부

1bit

8 bit

23 bit

      4byte 32비트의 크기

부호비트: 부호비트 0(+)/1(-)

지수부: 지수승

가수부: 첫 번째 비트는 2 -1승 두 번째 비트는 2 -2승을 나타내며 총 23비트

 

 실제 예 3.2f를 저장한다고 하면, 먼저

 3.2f이진수 11.001100110011……

 지수승으로 표현 소수점을 일의 자리 이동. 따라서 3.2(10) = 1.1001100110011…x21(2)이 된다.

 부호비트는 양수 0

 지수부는 IEEE 754의 규약에 따르면 대수연산의 편의를 위해 2 n승은 127+n으로 표시한다. 위에서는 2 1승이므로 127+1 = 128이 된다. 이를 2진수로 표현하면 10000000

 또한, 가수부에서는 정수 부분의 1은 항상 존재하는 것이기 때문에 생략을 하고 그 이하 소수점 부분만을 저장한다. 따라서 가수부는 소수점 이하 23자리까지 표현하며 24번째 자리에서는 CPU의 특성에 따라 올리거나 버리게 된다. Intel CPU에서는 올리기 때문에 가수부에 저장되는 값은 10011001100110011001101이 된다.

 이를 모두 합쳐서 표현하면 0 1000000 10011001100110011001101이 된다.

 

    

 

위의 실행결과 화면은 3.2f가 실제 메모리에 저장된 순서대로 16진수와 2진수로 출력한 것이다.

Intel CPU에서는 Little Endian방식으로 데이터가 저장되므로, 역순으로 나타내면 404CCCCD이며,

2진수로 나타내면, 0100 0000 0100 1100 1100 1100 1100 1101

 

2.3 소숫점 13.25의 2진수 변환  

13.25  정답 ☞1101.01

 

[13의 이진수]
8 4 2 1
=1101

 

[0.25의 이진수]

 

0.25 자리올림 1.0될때 까지 소숫점 * 2를 한다. 

0.25 * 2 = 0.5 _자리 올림 없음☞ 0
0.5 * 2 = 1.0 _자리 올림 발생☞ 0
0.01

 

[1101.01]

3.2(10) = 1101.01(2)= 1.10101…x23(2)

지수부 = 127 +지수(23(2)) =127+지수(3)=130=1000 0010(2)

 *가장큰수 +128, 가장 작은수 -127

 -지수부[0.0000101] -> 지수부로 표현[1.01…x2-5(2)]

               = 127+지수(-5)=122=111 1010(2)

가수부 = 1 0101(2)   

 

2.3.1 float형의 데이터의 메모리 내 저장 방식(IEEE 754) 예) 3.2(10) = 1101.01(2)

부호

비트

 지수부(8bit)

가수부(23bit)

 0

 1

 0

 0

 0

 0

 0

 1

 0

 1

 0

 1

 0

 1

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 

     2.4 float 예제

 #include <stdio.h>
int main()
{
  float fNum;
  fNum=3.0/2.0;

  /*실수형으로 입력시 결과는 실수 출력*/
  printf("%f \n", fNum);

  return 0;
}

  #include <stdio.h>
int main()
{
  float fNum;
  fNum=3/2;

  ☞/*정수형으로 입력시 아래 결과는정수 출력*/
  printf("%f \n", fNum);

  return 0;
}

 결과 출력 1.500000

 결과 출력 1.000000

실행

 

'…™업무일지。' 카테고리의 다른 글

[smart]이재우-20140312  (0) 2014.03.12
[smart]이재우-20140311  (0) 2014.03.11
[smart]이재우-20140307  (0) 2014.03.07
[smart]이재우-20140306(2)  (0) 2014.03.06
[smart]이재우-20140306(1)  (1) 2014.03.06