Введение в формат представления чисел
Прежде чем приступить к решению, важно понять, как числа хранятся в компьютере. Рассмотрим основные моменты:
Числа с плавающей точкой (вещественные числа) хранятся в формате IEEE 754. Для 4-х байтовой (32-битной) ячейки этот формат выглядит так:
- 1 бит — знак (0 — положительное число, 1 — отрицательное).
- 8 бит — порядок (сдвиг на фиксированную величину, смещение на 127).
- 23 бита — мантисса (дробная часть числа).
Целые числа в 2-х байтах (16 бит) обычно хранятся в знаковом формате (со знаком) или беззнаковом формате. Если используется знаковое представление, старший бит указывает знак числа: 0 — положительное, 1 — отрицательное. Отрицательные числа хранятся в дополнительном коде.
а) Получить шестнадцатеричную форму представления числа в формате с плавающей точкой
Чтобы получить шестнадцатеричное представление числа в формате IEEE 754, следуем алгоритму:
- Представьте число в двоичном виде.
- Определите знак числа (1 для отрицательных, 0 для положительных).
- Преобразуйте число в нормализованную форму (1.m \times 2^e), где (1.m) — мантисса, (e) — порядок.
- Вычислите смещённый порядок (e' = e + 127).
- Запишите знак, порядок (8 бит), мантиссу (23 бита).
- Преобразуйте результат в шестнадцатеричную форму.
1) Для числа (-63,611):
- Число отрицательное, знак (S = 1).
- Десятичное число (-63,611) в двоичном виде: (111111.100111.).
- Нормализуем: (1.11111100111 \times 2^5).
- Порядок (e = 5). Смещённый порядок (e' = 5 + 127 = 132). В двоичном виде (132 = 10000100).
- Мантисса (23 бита): Берём дробную часть после запятой (11111100111), дополняем нулями до 23 бит: (11111100111000000000000).
- Записываем: знак (S = 1), порядок (e' = 10000100), мантисса (11111100111000000000000).
- Сборка: (1|10000100|11111100111000000000000).
- В шестнадцатеричном виде: (C47E4E00).
2) Для числа (60,509):
- Число положительное, знак (S = 0).
- Десятичное число (60,509) в двоичном виде: (111100.1000001001.).
- Нормализуем: (1.111001000001001 \times 2^5).
- Порядок (e = 5). Смещённый порядок (e' = 5 + 127 = 132). В двоичном виде (132 = 10000100).
- Мантисса (23 бита): (11100100000100100000000).
- Записываем: знак (S = 0), порядок (e' = 10000100), мантисса (11100100000100100000000).
- Сборка: (0|10000100|11100100000100100000000).
- В шестнадцатеричном виде: (42722000).
б) Восстановить вещественное число из шестнадцатеричного представления
Для восстановления числа:
- Преобразуем шестнадцатеричное число в двоичный вид.
- Разделяем на знак, порядок и мантиссу.
- Вычисляем порядок (e = e' - 127).
- Восстанавливаем нормализованное число и умножаем на (2^e).
- Учитываем знак числа.
1) Для числа (45DB0000):
- В шестнадцатеричном виде: (45DB0000). В двоичном виде: (01000101 11011011 00000000 00000000).
- Знак (S = 0) (число положительное).
- Порядок (e' = 10000101_2 = 133). (e = 133 - 127 = 6).
- Мантисса (1.11011011000000000000000).
- Число: (1.11011011 \times 2^6 = 111011.011 = 59,5).
2) Для числа (C88B6000):
- В шестнадцатеричном виде: (C88B6000). В двоичном виде: (11001000 10001011 01100000 00000000).
- Знак (S = 1) (число отрицательное).
- Порядок (e' = 10001000_2 = 136). (e = 136 - 127 = 9).
- Мантисса (1.00010110110000000000000).
- Число: (-1.0001011 \times 2^9 = -514,75).
в) Восстановить целое число из шестнадцатеричного представления
Для целых чисел:
- Преобразуйте шестнадцатеричное число в двоичный вид.
- Определите, знаковое или беззнаковое представление используется.
- Если число знаковое и старший бит равен 1, преобразуйте его из дополнительного кода.
1) Для числа (F6E5):
- В шестнадцатеричном виде: (F6E5). В двоичном виде: (11110110 11100101).
- Старший бит (1), значит число отрицательное.
- Преобразуем из дополнительного кода:
- Инвертируем все биты: (00001001 00011010).
- Прибавляем (1): (00001001 00011011 = 2347_{10}).
- Добавляем знак: (-2347).
2) Для числа (08D7):
- В шестнадцатеричном виде: (08D7). В двоичном виде: (00001000 11010111).
- Старший бит (0), число положительное.
- Десятичное значение: (8D7{16} = 2263{10}).
Ответы:
а)
- (-63,611): (C47E4E00).
- (60,509): (42722000).
б)
- (45DB0000): (59,5).
- (C88B6000): (-514,75).
в)
- (F6E5): (-2347).
- (08D7): (2263).