Исходные данные: x=10101, y=-1110001
- Получение прямого кода: в том случае, если число положительное, то и прямой и обратный и дополнительный коды не отличаются друг от друга, тогда получается следующее (добавляем нули до 8 чисел):
Исходное число | Прямой код | Обратный | Дополнительный |
10101 | 10101 | 10101 | 10101 |
- Если в число отрицательное, то в прямом коде «1» ставится на первую позицию, остальные числа не меняются, тогда для y=-1110001 прямой код будет равен 11110001.
- Для получения обратного кода нужно не трогать первую «1», она является признаком того, что число отрицательное, а остальные инвертируем, тогда 10001110
- Для получения дополнительного кода нужно прибавить «1» в самый конец, тогда 10001111
- Теперь складываем оба числа
Исходное число | Прямой код | Обратный | Дополнительный |
10101 | 00010101 | 00010101 | 00010101 |
-1110001 | 11110001 | 10001110 | 10001111 |
10100011 | 10100100 |
Анализируем обратный код
В старшем бите 1. Следовательно, в результате сложения получили отрицательное число. Переведем его обратно в прямой код. Для этого найдем обратный код (инвертируем все биты, кроме знакового): 1011100
Получили число 1011100. В десятичном представлении это число имеет вид:
Для перевода необходимо умножить разряд числа на соответствующую ему степень разряда.
1011100 = 26*1 + 25*0 + 24*1 + 23*1 + 22*1 + 21*0 + 20*0 = 64 + 0 + 16 + 8 + 4 + 0 + 0 = 92
Результат сложения (в десятичном представлении): -92
Анализируем дополнительный код
В старшем бите 1. Следовательно, в результате сложения получили отрицательное число. Переведем его обратно в прямой код. Для этого найдем обратный код (инвертируем все биты, кроме знакового): 1011011
Дополнительный код (прибавляем 1)
Получили число 1011100. В десятичном представлении это число имеет вид:
Для перевода необходимо умножить разряд числа на соответствующую ему степень разряда.
1011100 = 26*1 + 25*0 + 24*1 + 23*1 + 22*1 + 21*0 + 20*0 = 64 + 0 + 16 + 8 + 4 + 0 + 0 = 92
Результат сложения (в десятичном представлении): -92