Выполнить действия над машинными кодами чисел с фиксированной точкой в 16-разрядном формате
.pdf
Зарегистрируйся в 2 клика в Кампус и получи неограниченный доступ к материалам с подпиской Кампус+ 🔥
Выполнить действия над машинными кодами чисел с фиксированной точкой в 16-разрядном формате (двумя способами: в 2-ичной и 16-ричной системах счисления): X1 = A + B, X2 = A - B, X3 = -A + B, X4 = -A - B.
A10 = -512 B10 = 314 (Произвести проверку).
Нужно полное решение этой работы?
Ответ
X1 = 11111111001110102 = FF3A16; X2 = 1111110011000110 = FCC616;
X3 = 00000011001110102 = 033A16; X4 = 00000000110001102 = 00C616
Решение
1) Переведём модуль чисел A и B в 2-ую и 16-ую системы счисления:
|A| = 51210 = 29 = 10000000002 = 10 0000 00002 = 20016
|B| = 31410 = 1001110102 = 1 0011 10102 = 13A16
314 : 2 = 157 целых 0 остаток
157 : 2 = 78 целых 1 остаток
78 : 2 = 39 целых 0 остаток
39 : 2 = 19 целых 1 остаток
19 : 2 = 9 целых 1 остаток
9 : 2 = 4 целых 1 остаток
4 : 2 = 2 целых 0 остаток
2 : 2 = 1 целых 0 остаток
1 : 2 = 0 целых 1 остаток
2) Представим числа A, -A, B в машинных кодах с фиксированной точкой в 16-разрядном формате (2 байта – 16 бит):
-A = 51210 = 0000 0010 0000 00002 = 020016
A = 51210 = 1111 1110 0000 00002 = FE0016
(Обратный код (инвертирование -A) + 1: 1111 1101 1111 11112 + 12)
B = 31410 = 0000 0001 0011 10102 = 013A16
+1111 1110 0000 0000 +FE00
0000 0001 0011 1010 013A
1111 1111 0011 1010 FF3A
3) Найдем X1, X2, X3 и X4
X1 = A + B = 1111 1111 0011 10102 = FF3A16
_1111 1110 0000 0000 _FE00
0000 0001 0011 1010 013A
1111 1100 1100 0110 FCC6
X2 = A - B = 1111 1100 1100 01102 = FCC616
+0000 0010 0000 0000 +0200
0000 0001 0011 1010 013A
0000 0011 0011 1010 033A
X3 = -A + B = 0000 0011 0011 10102 = 033A16
_0000 0010 0000 0000 _0200
0000 0001 0011 1010 013A
0000 0000 1100 0110 00C6
X4 = -A - B = 0000 0000 1100 01102 = 00C616
4) Для проверки переведем числа X1, X2, X3 и X4 в десятичную систему:
X1 = 1111 1111 0011 10102 – первый бит «1», следовательно, число отрицательное.
Найдем модуль числа X1 надо – вычтем «1» и инвертируем:
вычитание: 1111 1111 0011 10102 - 12 = 1111 1111 0011 10012
инвертирование: 1111 1111 0011 10012 -> 0000 0000 1100 01102
|X1| = 0000 0000 1100 01102 = 27 + 26 + 22 + 21 = 128 + 64 +4 + 2 = 19810
X1 = -198 (проверка: -512 + 314 = -198).
X2 = 1111 1100 1100 01102 – отрицательное.
Найдем модуль числа X2:
вычитание: 1111 1100 1100 01102 - 12 = 1111 1100 1100 01012
инвертирование: 1111 1100 1100 01012 -> 0000 0011 0011 10102
|X2| = 0000 0011 0011 10102= 29 + 28 + 25 + 24 + 23 + 21 =
512 + 256 + 32 + 16 + 8 + 2= 82610
X2 = -826 (проверка: -512 - 314 = -826)
X3 = 0000 0011 0011 10102 = 033A16 = 162 * 3 + 161 * 3 + 160 * 10 =
= 256 * 3 + 16 * 3 + 10 = 768 + 58 = 82610
X3 = 826 (проверка: 512 + 314 = 826)
X4 = 0000 0000 1100 01102 = 00C616 = 161 * 12 + 160 * 6 = 19810
X4 = 198 (проверка: 512 - 314 = 198)
Ответ:
X1 = 11111111001110102 = FF3A16; X2 = 1111110011000110 = FCC616;
X3 = 00000011001110102 = 033A16; X4 = 00000000110001102 = 00C616