Language/C C언어 강좌 (컴파일 에러 종류/ 포인터/IEE754 표준 방식)
  • 728x90
    반응형

     

     

     

    C언어 Chapter 11. IEE 754 표준방식


     

     

     

    컴파일 실행 과정의 에러 Type

    iNum = 3;

     

    1. 3의 type : int 형
    2. 대입연산자 (좌측) : int형
    3. 1. 2. 과정을 비교 : 형동등성 (1. 2. 3에서 발생 에러 type : Compile time error)

     

    심볼 테이블

    Type Name Address
    int iNum 2000

     

    • 대입 : iNum의 메모리 위치 : 2000번지 (발생 에러 type : Run time error )

     

     

    Compile time error 종류

    • 전처리 과정 에러
    • C문법 에러
    • 링크 에러

     

    🔔 예) 전처리 과정 에러 #include 에서 i를 빼먹었을 때

     

    결과 : directive(지시자) error

     

     

    🔔 예) C문법 에러 return 0의 세미클론(;)을 빼먹었을 때

     

    결과 : parse (문법적으로 분석하다)

     

     

    🔔 예) return 0;에서 n을 빼먹었을 때

     

    결과 : undeclared (글자 에러)

     

     

    🔔 예) printf함수의 p를 빼먹었을 때

     

    • 위 소스를 컴파일만 하였을 땐 에러가 나지않는 것을 알 수 있다.
    • 함수의 에러는 실행파일을 만들기 위한 링크과정에서 일어난다.

     

    💡 Tip : gcc 컴파일러에서 실행파일을 생성하지 않고 컴파일만 할 때
        gcc -c test.c

    💡 Tip : cl 컴파일러에서 실행파일을 생성하지 않고 컴파일만 할 때
        cl /c test.c

     

    결과 : pritnf 함수의 에러는 컴파일이 아닌 링크 과정에서 발생한다.

     

    결과 : cl컴파일러에서 LINK로 링크 에러 출력

     

    💡 Tip : 대입 연산자에서 에러가 발생하였을 때 l-value의 l은 left r-value는 right를 뜻한다.

     

    💡 Tip : * = asterisk

     

     

     

    IEE 754표준 형식으로 표현하기

     

    📌 32비트 단정도(single) 실수는 부호 비트 지수(exponent) 비트 : 8 가수(mantissa) 비트 : 23의 자릿수로 표현된다. 32.125는 양수이므로 부호비트는 0이된다.

     

    • 32.125 를 IEE 754 표준형식로 표현
    • 32.125 (10진수) = 100000.001 (2진수)
      • 1.00000001 2^5 정수자리가 1이되도록 정규화.
      • 2의 5제곱한 것은 소수점이 옮겨졌기 때문이다.
      • 255 의절반은 127 이므로 2^( x - 127 )
      • 2^( x -127 = 5 ) 일때 132 이다.

     

    💡 Tip : 10진수를 2진수로 바꿀 때 정수자리는 2로 나누고 ...소수자리는 2를 곱해서 구한다.

     

    🎯 정리

    • 부호 : 0
    • 지수 : 127+5 = 132( 10진수 ) = 1000 0100(2진수)
    • 가수 : 1000 0000 0100 0000 0000 0000 (23자리 이진수)
      (가수부 표현시 최상위 1은 표현 하지 않음) 그러므로 "000 0000 0100 0000 0000 0000" 이다.

     

    🎯 전체비트를 나열

    부호     지수                         가수

    0100 0010 0000 0000 1000 0000 0000 0000

    (2진수)

     

    42 00 80 00(16진수)

     

    메모리에 저장되면 Little Endian 방식으로 거꾸로 저장된다.

    0000 0000 0000 1000 0000 0000 0010 0100

     

    🔔 예) 포인터를 사용해 주소값 지정하여 넣기

     

    결과

     

     

     

     

    728x90
    반응형
상단으로