아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

부동소수점 형식 변환

시간 제한1초메모리 제한256 MB

요약
8자리 16진수 Gould 부동소수점 값을 버림과 무한대 및 비정규 수 처리 규칙에 따라 IEEE 754 단정밀도 16진수 값으로 변환합니다.
난이도

보통10점 중 5점

유형
비트 연산, 수학, 구현
정답자
아직 제출이 없습니다

문제

지금은 쓰이지 않는 Gould 부동소수점 형식으로 적은 수를 IEEE 754 단정밀도 형식으로 가능한 한 정확하게 옮기려 한다.

Gould 형식은 32비트다.

부호 비트 1개, 지수부 7비트, 가수부 24비트로 이루어지고, 이 32비트를 16진수 8자리로 적는다. 가수부는 앞의 세 비트까지 0이 될 수 있다. 이 형식이 나타내는 값은 다음과 같다.

value=(−1)S×16EXP−64×MANTISSA224\text{value} = (-1)^{S} \times 16^{EXP - 64} \times \frac{MANTISSA}{2^{24}}

SS는 부호 비트, EXPEXP는 지수부, MANTISSAMANTISSA는 가수부다. 0은 32비트가 모두 0인 형태로 적는다.

IEEE 754 단정밀도 형식도 32비트다.

부호 비트 1개, 지수부 8비트, 가수 24비트로 이루어진다. 정규화된 수에서 가수의 맨 앞 비트는 항상 1이므로 그 비트는 저장하지 않고, 가수부를 23비트로 적는다.

지수부가 0도 아니고 255도 아니면 정규화된 수이고, 값은 다음과 같다.

value=(−1)S×2EXP−127×(1+MANTISSA223)\text{value} = (-1)^{S} \times 2^{EXP - 127} \times \left(1 + \frac{MANTISSA}{2^{23}}\right)

지수부가 255이고 가수부가 0이면 양의 무한대 또는 음의 무한대이며, 어느 쪽인지는 부호 비트가 정한다.

지수부가 255이고 가수부가 0이 아니면 수가 아닌 값이고, 이 문제에서는 다루지 않는다.

지수부가 0이고 가수부가 0이면 +0 또는 -0이며, 부호 비트로 구분한다.

지수부가 0이고 가수부가 0이 아니면 비정규 값이고, 값은 다음과 같다.

value=(−1)S×2−126×MANTISSA223\text{value} = (-1)^{S} \times 2^{-126} \times \frac{MANTISSA}{2^{23}}

Gould 형식으로 적은 수가 주어지면 다음 규칙에 따라 옮긴다.

  • 값이 0이면 +0을 출력한다.
  • 정규화된 IEEE 수로 담기에 너무 크면 양의 무한대 또는 음의 무한대를 출력한다. 부호는 부호 비트를 따른다.
  • 정규화된 IEEE 수로 담기에 너무 작으면, 비정규 값으로 나타낼 수 있을 때는 비정규 식으로 계산한 결과를 출력하고, 나타낼 수 없을 때는 +0 또는 -0을 출력한다. 부호는 부호 비트를 따른다.
  • 나머지 경우에는 정규화된 IEEE 값을 출력한다.

가수를 옮길 때 비트가 모자라면 모자란 아래 자리를 0으로 채우고, 비트가 남으면 남는 아래 비트를 버린다. 반올림은 하지 않는다.

입력

첫 줄에 테스트 케이스의 수 PP가 주어진다. (1≤P≤10001 \le P \le 1000)

이어지는 PP개의 줄에는 각각 테스트 케이스의 번호와 Gould 형식으로 적은 수 하나가 공백으로 구분되어 주어진다. 이 수는 숫자 0부터 9까지와 대문자 A부터 F까지로만 이루어진 16진수 8자리다.

출력

각 테스트 케이스마다 테스트 케이스의 번호와 옮긴 IEEE 값을 공백으로 구분해 한 줄에 출력한다. IEEE 값은 대문자 16진수 8자리로 적는다.

예제1

  1. 예제 1

    입력
    4
    1 41200000
    2 E0FFFFFE
    3 E11FFFFF
    4 88888888
    
    예상 출력
    1 40000000
    2 FF7FFFFE
    3 FF800000
    4 80000000