Задачи на машинный код №2 (3 из 3)
41. Записать число 195 в форме с фиксированной запятой. Разрядная сетка 16
Чтобы поместить в 16 бит число со знаком и фиксированной точкой, надо:
1) старший бит отвести под знак
2) оставшиеся 15 бит поделить между целой и дробной частями так, чтобы в целую поместилось число 195<28.
В итоге (слева направо): бит под знак, 8 бит под целую часть, пять - под дробную.
Ответ: 0|11000011|0000000
42. Найти сумму чисел с фиксированной запятой -0,1101 и 0,1001 используя сумматор обратного кода
Представим числа -0.11012 и 0.10012 в обратном коде.
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Двоичное число 0000000.1101 имеет обратный код 1,1111111.0010
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Двоичное число 0000000.1001 имеет обратный код 0,0000000.1001
Сложим числа 11111111.0010 и 00000000.1001
В итоге получаем:
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | | | | | | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 1
| 0
| 0
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
|
Результат сложения: 111111111011
В старшем бите 1. Следовательно, в результате сложения получили отрицательное число. Переведем его обратно в прямой код. Для этого найдем обратный код (инвертируем все биты, кроме знакового): 00000000100
Ответ: 0000000.0100.
43. Найти сумму чисел с фиксированной запятой -0,1001 и -0,1110 используя сумматор дополнительного кода
Представим числа -0.10012 и -0.11102 в дополнительном коде.
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Двоичное число 0000000.1001 имеет обратный код 1,1111111.0110
Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
В итоге получаем:
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | | | | | | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 0
|
0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
Число -0.1001 представляется в двоичном дополнительном коде как 1,1111111.0111
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Двоичное число 0000000.1110 имеет обратный код 1,1111111.0001
Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
В 0-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 1-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | | | | | 1
| |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 0
| 1
|
0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 1
|
| | | | | | | | | | | 0
|
В итоге получаем:
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | | | | | 1
| |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 0
| 1
|
0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
Число -0.1110 представляется в двоичном дополнительном коде как 1,1111111.0010
Сложим числа 11111111.0111 и 11111111.0010
В 1-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 2-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | | | | 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | | | | | | | | | 0
| 1
|
В 2-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 3-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | | | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | | | | | | | | 0
| 0
| 1
|
В 4-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 5-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | | | | | | 0
| 1
| 0
| 0
| 1
|
В 5-ом разряде возникло переполнение (1 + 1 + 1 = 11). Поэтому записываем 1, а 1 переносим на 6-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | | | | | 1
| 0
| 1
| 0
| 0
| 1
|
В 6-ом разряде возникло переполнение (1 + 1 + 1 = 11). Поэтому записываем 1, а 1 переносим на 7-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | 1
| 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | | | | 1
| 1
| 0
| 1
| 0
| 0
| 1
|
В 7-ом разряде возникло переполнение (1 + 1 + 1 = 11). Поэтому записываем 1, а 1 переносим на 8-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | 1
| 1
| 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | | | 1
| 1
| 1
| 0
| 1
| 0
| 0
| 1
|
В 8-ом разряде возникло переполнение (1 + 1 + 1 = 11). Поэтому записываем 1, а 1 переносим на 9-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | 1
| 1
| 1
| 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | | 1
| 1
| 1
| 1
| 0
| 1
| 0
| 0
| 1
|
В 9-ом разряде возникло переполнение (1 + 1 + 1 = 11). Поэтому записываем 1, а 1 переносим на 10-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| 1
| 1
| 1
| 1
| 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| | 1
| 1
| 1
| 1
| 1
| 0
| 1
| 0
| 0
| 1
|
В 10-ом разряде возникло переполнение (1 + 1 + 1 = 11). Поэтому записываем 1, а 1 переносим на 11-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 0
| 0
| 1
|
В 11-ом разряде возникло переполнение (1 + 1 + 1 = 11). Поэтому записываем 1, а 1 переносим на 12-й разряд.
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 0
| 0
| 1
|
В итоге получаем:
11
| 10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| | 1
| 1
| | |
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 1
| 1
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 0
| 1
| 0
|
1
| 1
| 1
| 1
| 1
| 1
| 1
| 0
| 1
| 0
| 0
| 1
|
Результат сложения: 111111101001
В старшем бите 1. Следовательно, в результате сложения получили отрицательное число. Переведем его обратно в прямой код. Для этого найдем обратный код (инвертируем все биты, кроме знакового): 00000010110
Дополнительный код (прибавляем 1):
В итоге получаем:
10
| 9
| 8
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| | | | | | | | | | |
0
| 0
| 0
| 0
| 0
| 0
| 1
| 0
| 1
| 1
| 0
|
0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 1
|
0
| 0
| 0
| 0
| 0
| 0
| 1
| 0
| 1
| 1
| 1
|
Ответ: 0000001.0111.