Сложение беззнаковых чисел
Беззнаковые числа складываются вполне очевидным образом, с одной оговоркой.
Любые цифры, выходящие за пределы определенного числа разрядов, отбрасываются (см. лекцию 3)
Например, если работать в 8-битном беззнаковом представлении, то сумма \(11110000_2 + 00010000_2\) будет иметь значение
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | |
(1) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Все, что выходит за рамки 8 разрядов отбрасывается. Поэтому в восьмиразрядном знаковом представлении, \(11110000_2 + 00010000_2 = 0\)
Сложение и вычитание знаковых чисел
Отрицательные числа представляются в виде дополнительного кода (см. лекцию 3)
Дополнительный код строится следующим образом:
- Все разряды числа инвертируются
- К полученному числу беззнаково прибавляется 1
Дополнительный код дополнительного кода дает прямой код. Исходя из этого, можно так же применить этот алгоритм в обратном порядке:
- Беззнаково вычитается 1
- Все разряды результата инвертируются
Пример:
Число \(-27\) в 8-разрядном беззнаковом представлении.
Прямой код числа \(27\) – это просто число в двоичной системе счисления: \(11011_2\). Дополняя до 8 разрядов: \(00011011_2\)
Строя дополнительный код, получаем \(11100101_2\).
Пример:
Известно, что используется 8-разрядное знаковое представление, и дан двоичный код числа \(11110000_2\). Что это за число?
Поскольку старший разряд – единица, то это дополнительный код. Построим прямой код: \(00010000_2 = 16_{10}\).
Ответ: \(-16\).
Вычитание реализуется как сложение отрицательных чисел (выраженных дополнительным кодом).
Пример:
Вычислим разность \(15-18\). Для этого, преобразуем ее к сумме \(15+(-18)\). В 8-разрядном знаковом двоичном коде, \(15\) представляется как \(00001111_2\), а \(-18\) в виде дополнительного кода. \(18 = 00010010_2\), \(-18\) тогда представляется как \(11101110_2\).
Складываем:
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
Поскольку старший бит результата равен 1, то это дополнительный код. Соответствующий прямой код \(00000011_2 = 3\), соответственно результат \(-3\).