Отлично, давайте разберем эти задания по порядку.
Задание для решений №1
В этом задании мы будем работать с целыми числами в 2-х байтовой ячейке. Это означает, что мы используем 16 бит для представления числа.
1. Получить двоичную форму внутреннего представления целого числа в 2-х байтовой ячейке.
Возьмем для примера ваш вариант №1: число 1341.
1. Переводим число в двоичную систему:
Делим 1341 на 2 и записываем остатки:
1341 / 2 = 670 остаток 1
670 / 2 = 335 остаток 0
335 / 2 = 167 остаток 1
167 / 2 = 83 остаток 1
83 / 2 = 41 остаток 1
41 / 2 = 20 остаток 1
20 / 2 = 10 остаток 0
10 / 2 = 5 остаток 0
5 / 2 = 2 остаток 1
2 / 2 = 1 остаток 0
1 / 2 = 0 остаток 1
Собираем остатки снизу вверх: 10100111101.
2. Дополняем до 16 бит:
Так как 2 байта = 16 бит, а у нас получилось 11 бит, нужно добавить нули впереди, чтобы получилось 16 бит.
0000010100111101
Итак, двоичная форма числа 1341 в 2-х байтовой ячейке: 0000010100111101.
Теперь рассмотрим отрицательное число, например, -1341. Для отрицательных чисел используется дополнительный код.
1. Получаем двоичное представление модуля числа:
Мы уже получили для 1341: 0000010100111101.
2. Инвертируем все биты (получаем обратный код):
Меняем 0 на 1 и 1 на 0: 1111101011000010.
3. Прибавляем 1 к обратному коду (получаем дополнительный код):
1111101011000010 + 1 = 1111101011000011.
Итак, двоичная форма числа -1341 в 2-х байтовой ячейке: 1111101011000011.
2. Получить шестнадцатеричную форму внутреннего представления целого числа в 2-х байтовой ячейке.
Продолжим с числом 1341.
1. Берем двоичное представление: 0000010100111101.
2. Разбиваем на группы по 4 бита (тетрады) справа налево:
0000 0101 0011 1101
3. Каждую тетраду переводим в шестнадцатеричную цифру:
0000 = 0
0101 = 5
0011 = 3
1101 = D (так как 13 в десятичной системе)
Итак, шестнадцатеричная форма числа 1341: 053D.
Теперь для -1341.
1. Берем двоичное представление в дополнительном коде: 1111101011000011.
2. Разбиваем на группы по 4 бита:
1111 1010 1100 0011
3. Каждую тетраду переводим в шестнадцатеричную цифру:
1111 = F
1010 = A (так как 10 в десятичной системе)
1100 = C (так как 12 в десятичной системе)
0011 = 3
Итак, шестнадцатеричная форма числа -1341: FAC3.
3. По шестнадцатеричной форме внутреннего представления целого числа в 2-х байтовой ячейке восстановить само число.
Возьмем для примера ваш вариант №1: F7AA.
1. Переводим шестнадцатеричное число в двоичное:
F = 1111
7 = 0111
A = 1010
A = 1010
Получаем: 1111011110101010.
2. Определяем знак числа:
Первый бит (самый левый) равен 1, значит, число отрицательное и представлено в дополнительном коде.
3. Находим модуль числа:
а) Вычитаем 1 из дополнительного кода:
1111011110101010 - 1 = 1111011110101001.
б) Инвертируем все биты:
0000100001010110.
4. Переводим полученное двоичное число в десятичное:
\(0 \cdot 2^{15} + 0 \cdot 2^{14} + 0 \cdot 2^{13} + 0 \cdot 2^{12} + 1 \cdot 2^{11} + 0 \cdot 2^{10} + 0 \cdot 2^9 + 0 \cdot 2^8 + 0 \cdot 2^7 + 1 \cdot 2^6 + 0 \cdot 2^5 + 1 \cdot 2^4 + 0 \cdot 2^3 + 1 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0\)
\( = 0 + 0 + 0 + 0 + 2048 + 0 + 0 + 0 + 0 + 64 + 0 + 16 + 0 + 4 + 2 + 0 \)
\( = 2048 + 64 + 16 + 4 + 2 = 2134 \)
Так как число было отрицательным, то восстановленное число: -2134.
(Проверим по таблице: для F7AA указано -2134. Все верно.)
Задание для решений №2
Здесь мы работаем с числами с плавающей точкой в 4-х байтовой ячейке, что соответствует стандарту IEEE 754 для одинарной точности.
1. Получить шестнадцатеричную форму внутреннего представления числа в формате с плавающей точкой в 4-х байтовой ячейке.
Возьмем для примера ваш вариант №1: число 26.28125.
1. Определяем знак числа:
Число положительное, поэтому знаковый бит (S) = 0.
2. Переводим целую и дробную части в двоичную систему:
а) Целая часть (26):
26 / 2 = 13 остаток 0
13 / 2 = 6 остаток 1
6 / 2 = 3 остаток 0
3 / 2 = 1 остаток 1
1 / 2 = 0 остаток 1
26 в двоичной системе: 11010.
б) Дробная часть (0.28125):
0.28125 * 2 = 0.5625 (0)
0.5625 * 2 = 1.125 (1)
0.125 * 2 = 0.25 (0)
0.25 * 2 = 0.5 (0)
0.5 * 2 = 1.0 (1)
0.28125 в двоичной системе: 0.01001.
Соединяем: 11010.01001.
3. Нормализуем число:
Перемещаем десятичную точку так, чтобы слева от нее осталась только одна единица.
1.101001001 * \(2^4\).
Мантисса (M) = 101001001 (единицу перед точкой не записываем).
4. Вычисляем экспоненту (E):
Смещение для одинарной точности равно 127.
Экспонента = степень + смещение = 4 + 127 = 131.
Переводим 131 в двоичную систему (8 бит):
131 / 2 = 65 остаток 1
65 / 2 = 32 остаток 1
32 / 2 = 16 остаток 0
16 / 2 = 8 остаток 0
8 / 2 = 4 остаток 0
4 / 2 = 2 остаток 0
2 / 2 = 1 остаток 0
1 / 2 = 0 остаток 1
Экспонента (E) = 10000011.
5. Собираем все части:
S (1 бит) | E (8 бит) | M (23 бита)
0 | 10000011 | 10100100100000000000000 (дополняем мантиссу нулями до 23 бит)
Получаем двоичное представление:
01000001110100100100000000000000
6. Разбиваем на группы по 4 бита и переводим в шестнадцатеричную форму:
0100 0001 1101 0010 0100 0000 0000 0000
4 1 D 2 4 0 0 0
Итак, шестнадцатеричная форма числа 26.28125: 41D24000.
(Проверим по таблице: для 26.28125 указано C5DB0000. Здесь есть расхождение. Давайте перепроверим мой расчет и ваш пример. Возможно, в вашем примере C5DB0000 относится к другому числу или является результатом ошибки. Я буду следовать своему расчету, так как он соответствует стандарту IEEE 754. Если C5DB0000 - это правильный ответ, то это число -27.375, а не 26.28125. Давайте я сделаю расчет для -29.625, чтобы показать, как это работает с отрицательными числами, и потом для C5DB0000.)
Давайте возьмем для примера ваш вариант №2: число -29.625.
1. Определяем знак числа:
Число отрицательное, поэтому знаковый бит (S) = 1.
2. Переводим целую и дробную части модуля числа (29.625) в двоичную систему:
а) Целая часть (29):
29 / 2 = 14 остаток 1
14 / 2 = 7 остаток 0
7 / 2 = 3 остаток 1
3 / 2 = 1 остаток 1
1 / 2 = 0 остаток 1
29 в двоичной системе: 11101.
б) Дробная часть (0.625):
0.625 * 2 = 1.25 (1)
0.25 * 2 = 0.5 (0)
0.5 * 2 = 1.0 (1)
0.625 в двоичной системе: 0.101.
Соединяем: 11101.101.
3. Нормализуем число:
1.1101101 * \(2^4\).
Мантисса (M) = 1101101.
4. Вычисляем экспоненту (E):
Экспонента = степень + смещение = 4 + 127 = 131.
Переводим 131 в двоичную систему (8 бит): 10000011.
5. Собираем все части:
S (1 бит) | E (8 бит) | M (23 бита)
1 | 10000011 | 11011010000000000000000 (дополняем мантиссу нулями до 23 бит)
Получаем двоичное представление:
11000001111011010000000000000000
6. Разбиваем на группы по 4 бита и переводим в шестнадцатеричную форму:
1100 0001 1110 1101 0000 0000 0000 0000
C 1 E D 0 0 0 0
Итак, шестнадцатеричная форма числа -29.625: C1ED0000.
(Проверим по таблице: для -29.625 указано 45D14000. Опять расхождение. Это означает, что либо я неправильно интерпретирую ваши данные, либо в ваших данных есть ошибки. Я буду продолжать использовать стандарт IEEE 754 для расчетов.)
Давайте я возьму число из вашего примера C5DB0000 и покажу, как его восстановить, чтобы вы могли понять, как это работает.
2. По шестнадцатеричной форме внутреннего представления вещественного числа в 4-х байтовой ячейке восстановить само число.
Возьмем для примера ваш вариант №1: C5DB0000.
1. Переводим шестнадцатеричное число в двоичное:
C = 1100
5 = 0101
D = 1101
B = 1011
0 = 0000
0 = 0000
0 = 0000
0 = 0000
Получаем: 11000101110110110000000000000000.
2. Разбиваем на части:
S (знаковый бит): 1 (первый бит)
E (экспонента): 10001011 (следующие 8 бит)
M (мантисса): 10110110000000000000000 (остальные 23 бита)
3. Определяем знак:
S = 1, значит, число отрицательное.
4. Вычисляем экспоненту:
Переводим 10001011 из двоичной в десятичную:
\(1 \cdot 2^7 + 0 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0\)
\( = 128 + 0 + 0 + 0 + 8 + 0 + 2 + 1 = 139 \)
Вычитаем смещение (127):
Степень = 139 - 127 = 12.
5. Формируем нормализованную мантиссу:
Добавляем скрытую единицу перед мантиссой: 1.1011011.
6. Восстанавливаем число:
Перемещаем десятичную точку на 12 позиций вправо (так как степень = 12):
1101101100000.0
(Добавляем нули, чтобы переместить точку на 12 позиций)
Теперь переводим это двоичное число в десятичное:
\(1 \cdot 2^{12} + 1 \cdot 2^{11} + 0 \cdot 2^{10} + 1 \cdot 2^9 + 1 \cdot 2^8 + 0 \cdot 2^7 + 1 \cdot 2^6 + 1 \cdot 2^5 + 0 \cdot 2^4 + 0 \cdot 2^3 + 0 \cdot 2^2 + 0 \cdot 2^1 + 0 \cdot 2^0\)
\( = 4096 + 2048 + 0 + 512 + 256 + 0 + 64 + 32 + 0 + 0 + 0 + 0 + 0 \)
\( = 4096 + 2048 + 512 + 256 + 64 + 32 = 7008 \)
Так как знаковый бит был 1, число отрицательное.
Итак, восстановленное число: -7008.
(Проверим по таблице: для C5DB0000 указано 26.28125. Это явное несоответствие. Мой расчет показывает -7008. Возможно, в вашем задании C5DB0000 - это не шестнадцатеричное представление 26.28125, а просто другое число, которое нужно восстановить. Я буду придерживаться правил IEEE 754.)
Давайте я возьму другой пример из вашей таблицы, где есть соответствие. Например, для 45D14000 указано -29.625. Это тоже неверно, так как 45D14000 начинается с 4, что означает положительное число.
Предположим, что в вашей таблице в столбце "1" даны числа, которые нужно перевести в шестнадцатеричную форму, а в столбце "2" даны шестнадцатеричные формы, которые нужно восстановить. И эти два столбца не обязательно соответствуют друг другу по номеру варианта.
Давайте я сделаю еще один пример для перевода числа в шестнадцатеричную форму, используя число из вашей таблицы, которое, возможно, имеет правильное шестнадцатеричное представление.
Возьмем число -29.625. Мой расчет дал C1ED0000.
Возьмем число 26.28125. Мой расчет дал 41D24000.
Если в вашем задании C5DB0000 должно быть результатом для 26.28125, то это не соответствует стандарту IEEE 754. Возможно, используется другой формат представления чисел с плавающей точкой, или в задании есть опечатка. Я буду исходить из того, что нужно применять стандарт IEEE 754.
Контрольные вопросы:
1. Как представляют целые числа?
Целые числа в компьютере обычно представляют в двоичной системе счисления. Для положительных чисел используется прямой код, где число просто переводится в двоичную форму и дополняется нулями до нужной разрядности. Для отрицательных чисел чаще всего используется дополнительный код.
2. Что используется для представления целого отрицательного числа?
Для представления целых отрицательных чисел в большинстве современных компьютерных систем используется дополнительный код.
Процесс получения дополнительного кода для отрицательного числа:
1. Берется модуль числа (положительное значение) и переводится в двоичную форму.
2. Все биты полученного двоичного числа инвертируются (0 меняется на 1, а 1 на 0). Это называется обратным кодом.
3. К полученному обратному коду прибавляется 1.
Полученный результат и есть дополнительный код отрицательного числа.
Преимущества дополнительного кода:
* Упрощает арифметические операции (сложение и вычитание можно выполнять одной и той же схемой).
* Устраняет проблему двух нулей (в прямом и обратном коде есть +0 и -0).
3. Какие числа не меняют изображения?
Этот вопрос может быть интерпретирован по-разному.
Если речь идет о представлении чисел в дополнительном коде, то положительные числа не меняют своего изображения при переходе от прямого кода к дополнительному коду (поскольку для них прямой, обратный и дополнительный коды совпадают).
Если речь идет о представлении чисел с плавающей точкой, то ноль (как положительный, так и отрицательный) имеет специальное представление, которое не меняется в зависимости от его значения (то есть, 0.0 и -0.0 имеют очень похожее, но не идентичное представление, но само значение "ноль" остается нулем).
Также, если говорить о представлении в целом, то числа, которые точно представимы в двоичной системе (например, степени двойки или суммы степеней двойки), не "меняют изображения" в том смысле, что их представление является точным, без округлений. В отличие от, например, 0.1 в десятичной системе, которое в двоичной системе является бесконечной периодической дробью и при представлении в конечном числе бит будет округлено.
Надеюсь, это подробное объяснение поможет вам!