20230210 음수의 1’s complement, IEEE single format

음수 1’s complement

음수를 1’s complement로 표현한다는 것은 그냥 각각의 bit를 0은 1로 1은 0으로 바꿔 표현하면 된다.
(To take the negative of the number, each bit is “complemented” - each zero is changed to one and each one is changed to zero. (Introduction to 80x86 Assembly Language and Computer Architecture, Richard C.Detmer, 20pg))

실수를 IEEE single format으로 인코딩하는 법

실수가 있으면 . 을 기준으로 . 앞을 정수부(whole part=integer part), . 뒤를 소수부(noninteger part)라고 함.

  • 정수부는 그냥 2진수로 바꾸면 됨.
  • 소수부는 2의 n제곱의 역수로 표현해야 됨. 예를 들어 0.375 = 3/8 = 1/4 + 1/8 처럼.
    그리고 2의 n제곱의 역수는 10의 n제곱의 역수에 대응함. 즉, 0.375 = 1/4 + 1/8 = 0.01b + 0.001b = 0.011b.
    cf. 1/2 = 0.1b, 1/4 = 0.01b, 1/8 = 0.001b
    (BC) 1b = 2^0, 10b = 2^1 인 것처럼, 1/2 = 2^-1 = 0.1b 인 것.

정수부 소수부를 모두 각각 2진수로 표현했으면 . 사용해서 합쳐서 표현한다. 예를 들어 78.375 = 1001110.011b

그 다음, 정수부에 1 한자리만 남도록 binary point(.)을 왼쪽으로 이동시키고 이동시킨 만큼 2의 n제곱을 곱해서 표현한다. 예를 들어 1001110.011b = 1.001110011 * 2^6

그 다음, Sign Field | Exponent Field | Fraction Field 를 채운다.

  • Sign Field(1 bit)
    가장 왼쪽 bit 하나가 해당되며, 양수이면 0을 음수이면 1을 할당한다.

  • Exponent Field(single-precision floating point이면 8 bits, double-precision floating point이면 11 bits)
    single-precision floating point이면 bias가 127이기 때문에, 127에 2의 지수(위에서 binary point 이동시켜서 이동시킨 만큼 2의 n제곱 곱했을 때의 n) 만큼을 더한다. 위의 예시 1001110.011b = 1.001110011 * 2^6 이라면 127 + 6
    double-precision floating point이면 bias가 1023이기 때문에, 1023에 동일하게 2의 지수만큼을 더한다.

  • Fraction Field(single-precision floating point이면 23 bits, double-precision floating point이면 52 bits)
    정수부는 항상 1이 되기 때문에 정수부 1은 버리고 소수부만 가져온 뒤 남는 오른쪽 bit들은 전부 0으로 채워서 single-precision이면 23bits를, double-precision이면 52bits가 되도록 한다.

마지막으로 4개씩 regrouping 해주고, 4 bits씩 hex로 바꿔 표현해준다.
(To take the negative of the number, each bit is “complemented” - each zero is changed to one and each one is changed to zero. (Introduction to 80x86 Assembly Language and Computer Architecture, Richard C.Detmer, 21pg-22pg))

Categories:

Updated:

Leave a comment