2. Прибавить к числу единицу. Если будет перенос за пределы разрядной
сетки, игнорировать.
Для примера рассмотрим снова число 37 и 8 разрядов. В двоичном виде
число 37 - это 00100101 (ведущие нули обязательны). Инвертировав, получа-
ем 11011010. Прибавив единицу, получим результат 11011011. Заметим, что
если бы у нас было 16 разрядов, дополнительный код стал бы другим –
1111111111011011.
Может возникнуть вопрос – зачем так сложно представлять отрицатель-
ные числа – не проще было бы просто ставить 1 в старший бит, если число
отрицательное? Дело в том, что такой вариант имеет ряд недостатков. Во-
первых, получается два отдельных нуля – «плюс нуль» и «минус нуль», что
несколько странно (хотя в вещественных числах, например, так и есть). Во-
вторых, за счёт лишнего нуля на единицу уменьшается возможный диапазон
чисел. И главное: арифметические операции в дополнительном коде реали-
зуются аппаратно более эффективно, так как вычитание можно заменить на
сложение с дополнительным кодом и тем самым нет необходимости аппарат-
но реализовывать операцию вычитания. Также сложение беззнаковых чисел
и чисел со знаком в дополнительном коде аппаратно выполняется одинаково.
Диапазон N-разрядных чисел со знаком составляет от -2
N-1
до 2
N-1
-1. На-
пример, 8-разрядные числа могут принимать значения от -128 до 127. Обра-
тите внимание – число -128 есть, а +128 – нет.
3. Представление многобайтовых целых чисел в памяти. В архитекту-
ре Intel принят так называемый прямой порядок хранения – то есть число
хранится от младших байтов к старшим в порядке увеличения адресов. На-
пример, если у нас имеется шестнадцатеричное двухбайтовое число 0CA7,
хранящееся по логическому адресу 00000000, то байт A7 хранится по адресу
00000000, а байт 0C – по адресу 00000001. При программировании могут
возникнуть ситуации, где это следует учитывать (например, вы хотите про-
читать из памяти старший байт чиcла).
Примечание. В других архитектурах это свойство может и не выпол-
няться. Например, внутри сетевых пакетов протоколов TCP/IP байты чисел
располагаются в противоположном порядке.
Контрольные вопросы и задания
Во всех приведенных заданиях не пользуйтесь компьютером и калькулято-
ром, постарайтесь все вычисления провести в уме (вначале можно на бумаге).
1. Представьте следующие числа в двоичной системе счисления, не пользуясь
компьютером и калькулятором: 9, 25, 80, 127, 128, 250.
2. Переведите следующие беззнаковые двоичные числа в десятичную систему,
не пользуясь компьютером и калькулятором: 11111000, 00110101, 11001100.
3. Запишите следующие шестнадцатеричные числа в двоичной системе (ис-
пользуйте быстрый способ перевода): 23A745F1, 75AB63CD, ABCDEF01
4. Напишите двоичное представление следуюших отрицательных чисел в
дополнительном коде (числа 8-разрядные): -25, -1, -100, -127, -128. Также
напишите результат и в шестнадцатеричном виде.