Лекция
План
1. Сложение
двоичных чисел
2. Умножение двоичных чисел
3. Непосредственное вычитание
двоичных чисел
4. Вычитание двоичных чисел в дополнительном коде
5. Двоичное число: прямой, обратный и дополнительный коды
1.
Сложение двоичных чисел
Двоичные числа складываются так же, как и десятичные, то
есть по разрядам. Сложение начинается с меньших разрядов. При этом действуют
следующие правила:
|
Таблица сложения |
|
0 + 0 = 0 |
|
0 + 1 = 1 |
|
1 + 0 = 1 |
|
1 + 1 = 10 |
|
1 + 1 + 1 = 11 |
|
1 + 1 + 1 + 1= 100 |
|
1 + 1 + 1 + 1 + 1 = 101 |
|
… |
За одно действие складываются только два числа. При сложении
нескольких чисел сначала складывают первое и второе число, затем прибавляют к
результату третье и т.д.
Оба числа пишут поразрядно друг над другом. В случае
переноса разряда единица записывается в следующий разряд и учитывается при
сложении цифр этого разряда. Иными словами, при переносе разряда приходится
складывать три двоичных числа.
Пример:
|
1 |
1 |
|
|
||||
|
+ |
1 |
0 |
1 |
1 |
|
|
|
|
1 |
0 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|||||
|
1 |
1 |
1 |
1 |
0 |
|
|
|
Для проверки правильности вычислений можно преобразовать
двоичные числа в десятичные, провести операцию с ними, а затем перевести
результат в двоичную систему счисления. В нашем случае: 11 + 19 = 30.
Пример:
|
1 |
|||||
|
+ |
1 |
1 |
0 |
1 |
|
|
1 |
1 |
0 |
|||
|
|
|||||
|
1 |
0 |
0 |
1 |
1 |
|
Решите самостоятельно:
1011101+1100110=11000011.
2. Умножение двоичных чисел
Двоичные числа умножаются так же, как и десятичные, то есть
по разрядам. Два числа помещают друг над другом, правая, крайняя цифра нижнего
числа, должна находиться под крайней правой цифрой верхнего числа. Далее
выполняются все действия, как при умножении десятичных чисел в столбик.
При этом действуют следующие правила:
|
Таблица умножения |
|
0 × 0 = 0 |
|
0 × 1 = 0 |
|
1 × 0 = 0 |
|
1 × 1 = 1 |
Примеры:
|
|
|
|||||
|
|
× |
1 |
1 |
0 |
||
|
1 |
0 |
1 |
||||
|
|
|
|||||
|
|
|
|
1 |
1 |
0 |
|
|
+ |
|
|
0 |
0 |
0 |
|
|
|
|
1 |
1 |
0 |
|
|
|
|
|
1 |
1 |
1 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
× |
|
1 |
1 |
0 |
1 |
|
|
|
|
|
1 |
1 |
0 |
|
|
|
|||||
|
|
|
0 |
0 |
0 |
0 |
|
|
+ |
|
1 |
1 |
0 |
1 |
|
|
|
1 |
1 |
0 |
1 |
|
|
|
1 |
0 |
0 |
1 |
1 |
1 |
0 |
|
|
|
|
|
|
|
|
Решите самостоятельно: 110101×1011=1001000111.
3. Непосредственное вычитание двоичных чисел
При вычитании действуют следующие правила:
|
Таблица вычитания |
|
0 - 0 = 0 |
|
1 - 0 = 1 |
|
1 - 1 = 0 |
|
10 - 1 = 1 |
Отрицательный результат операции 0 - 1 пока не
рассматриваем.
При вычитании вычитаемое число пишется под уменьшаемым.
Вычитание начинается с наименьшего разряда.
Пример.
|
- |
1 |
1 |
0 |
1 |
1 |
|
1 |
0 |
0 |
0 |
1 |
|
|
|
|||||
|
1 |
0 |
1 |
0 |
||
Здесь не возникло никаких трудностей, так как не было операции
0 - 1. Чтобы проводить такую операции, нужно заимствовать единицу из соседнего
старшего разряда. Тогда получаем: 10 - 1 = 1. После чего в старшем разряде
получается 0.
Пример.
|
10 |
|||||
|
- |
1 |
1 |
0 |
1 |
1 |
|
1 |
1 |
1 |
|||
|
|
|||||
|
1 |
0 |
1 |
0 |
0 |
|
Пример.
|
. |
1 |
1 |
1 |
. |
10 |
|
|
- |
1 |
0 |
0 |
0 |
1 |
0 |
|
1 |
1 |
0 |
1 |
1 |
||
|
|
||||||
|
|
|
|
1 |
1 |
1 |
|
4. Вычитание двоичных чисел в
дополнительном коде
Вычитание двоичных
чисел заменяется сложением с отрицательным числом. Для этого используется так
называемый дополнительный код. Чтобы получить дополнительный код, нужно
инвертировать число – заменить нули единицами и наоборот – и к полученному
обратному коду прибавить единицу.
Имеем правило для вычитания двоичных чисел:
1.
Добавляем в вычитаемому справа
столько нулей, чтобы количество разрядов вычитаемого равнялось количеству
разрядов уменьшаемого.
2.
У вычитаемого заменяем нули на единицы,
а единицы на нули – получаем обратный код.
3.
К обратному коду прибавляем 1 –
получаем дополнительный код.
4.
Складываем уменьшаемое и обратный
код.
5.
В полученном ответе отбрасываем
единицу в старшем разряде (справа).
Пример.
|
1 |
0 |
0 |
0 |
1 |
0 |
0 |
|
- |
|
1 |
0 |
0 |
0 |
1 |
1 |
|
= |
|
1 |
0 |
0 |
0 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
0 |
0 |
0 |
1 |
1 |
|
|
Вычитаемому дописываем нули справа |
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
1 |
0 |
1 |
1 |
1 |
0 |
0 |
|
|
Обратный код |
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
1 |
1 |
1 |
0 |
1 |
|
|
Дополнительный код |
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
Суммируем уменьшаемое и обратный код: |
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
|
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
1 |
1 |
1 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
0 |
0 |
0 |
0 |
1 |
|
В полученном двоичном числе отбрасываем единицу
слева |
|
|
|
|
|
|
|
|
|||||||||||||||||
Ответ: 100001.
Проверим вычисления с помощью выполнения действий с
соответствующими десятичными числами:
Уменьшаемое 10001002=26+22=64+4=6810
Вычитаемое 1000112=25+21+1=3510
Разность 100001=25+1=32+1=3310
68-35=33. Вычисления верны.
Пример.
|
|
1 |
1 |
1 |
1 |
0 |
1 |
|
- |
|
|
1 |
0 |
0 |
1 |
|
= |
|
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
0 |
0 |
1 |
0 |
0 |
1 |
|
|
Вычитаемому дописываем нули справа |
|
|||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
1 |
0 |
|
|
Обратный код |
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
1 |
1 |
|
|
Дополнительный код |
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||
|
|
1 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
+ |
1 |
1 |
1 |
1 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
1 |
1 |
0 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||
Ответ: 110100.
Решите
самостоятельно: 10011101-11110=1111111;
11101000-100111=11000001.
5. Двоичное
число: прямой, обратный и дополнительный коды
Прямой, обратный и дополнительный коды
двоичного числа – способы представления двоичных чисел, предназначенные для
записи отрицательных и положительных чисел.
Десятичное число можно представить в двоичном
виде. К примеру, десятичное число 100 в двоичном виде будет равно 1100100, или
в восьмибитном представлении 0110 0100. А как представить отрицательное
десятичное число в двоичном виде и произвести с ним арифметические операции?
Для этого и предназначены разные способы представления чисел в двоичном коде.
Следует
отметить, что положительные числа в двоичном коде вне зависимости от способа
представления (прямой, обратный или дополнительный коды) имеют одинаковый вид.
Прямой код
Прямой код используется в двух
вариантах.
В
первом (основной) – для записи только положительных чисел:
|
Десятичное
число |
Двоичное
число в прямом коде (в
8-битном представлении) |
|
0 |
0000
0000 |
|
10 |
0000
1010 |
|
100 |
0110
0100 |
|
255 |
1111
1111 |
В этом варианте (для восьмибитного
двоичного числа) мы можем записать максимальное число 255 (всего чисел 256 – от
0 до 255).
Второй
вариант – для записи как положительных, так и отрицательных чисел.
В этом случае старший бит (в нашем
случае – восьмой) объявляется знаковым разрядом (знаковым битом).
При
этом, если:
-
знаковый разряд равен 0, то число положительное
-
знаковый разряд равен 1, то число отрицательное
|
Разряды
восьмибитного двоичного числа |
|||||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Знаковый разряд |
Значение числа |
||||||
В этом случае диапазон десятичных чисел,
которые можно записать в прямом коде составляет от - 127 до +127:
|
Десятичное
число |
Двоичное
число в прямом коде (в
8-битном представлении) |
|
127 |
0111 1111 |
|
100 |
0110 0100 |
|
0 |
0000 0000 |
|
-0 |
1000 0000 |
|
-100 |
1110 0100 |
Подводя итоги, скажем, что прямой код
используется главным образом для представления положительных чисел.
Использование прямого кода для
представления отрицательных чисел является неэффективным – очень сложно
реализовать арифметические операции и, кроме того, в прямом коде два
представления нуля – положительный ноль и отрицательный ноль (чего не бывает):
Обратный код
Обратный код – метод вычислительной
математики, позволяющий вычесть одно число из другого, используя только
операцию сложения.
Обратный двоичный код положительного
числа состоит из одноразрядного кода знака (битового знака) – двоичной цифры 0,
за которым следует значение числа.
Обратный двоичный код отрицательного
числа состоит из одноразрядного кода знака (битового знака) – двоичной цифры 1,
за которым следует инвертированное значение положительного числа.
Для положительных чисел обратный код
двоичного числа имеет тот же вид, что и запись положительного числа в прямом
коде.
Для отрицательных чисел обратный код
получается из положительного числа в прямом коде, путем инвертирования всех
битов (1 меняем на 0, а 0 меняем на 1).
При 8-битном двоичном числе – знаковый
бит (как и в прямом коде) старший (8-й)
Диапазон десятичных чисел, который можно
записать в обратном коде от -127 до +127.
Арифметические
операции с отрицательными числами в обратном коде:
1-й
пример (для положительного результата)
Дано два числа:
100 = 0110 0100
-25 = - 0001 1001
Необходимо их сложить:
100 + (-25) = 100 - 25 = 75
1-й
этап
Переводим число -25 в двоичное число в
обратном коде:
25 = 0001 1001
-25= 1110 0110
и складываем два числа:
0110 0100 (100) + 1110 0110 (-25) = 1
0100 1010, отбрасываем старшую 1 (у нас получился лишний 9-й разряд -
переполнение) = 0100 1010
2-й
этап
Отброшенную в результате старшую единицу
прибавляем к результату:
0100 1010 + 1 = 0100 1011 (знаковый бит =0,
значит число положительное), что равно 75 в десятичной системе.
2-й
пример (для отрицательного результата)
Дано два числа:
5 = 0000 0101
-10 = - 0000 1010
Необходимо их сложить:
5 + (-10) = 5 - 10 = -5
1-й
этап
Переводим число -10 в двоичное число в обратном
коде:
10 = 0000 1010
-10= 1111 0101
и складываем два числа:
0000 0101 (5) + 1111 0101 (-10) = 1111
1010 (знаковый бит =1, значит число отрицательное)
2-й
этап
Раз результат получился отрицательный,
значит число представлено в обратном коде.
Переводим результат в прямой код (путем
инвертирования значения, знаковый бит не трогаем):
1111 1010 ----> 1000 0101
Проверяем:
1000 0101 = - 0000 0101 = -5
Обратный код решает проблему сложения и
вычитания чисел с различными знаками, но и имеет свои недостатки:
- арифметические операции проводятся в
два этапа;
- как и в прямом коде два представления
нуля – положительный и отрицательный.
Дополнительный
код
Это наиболее распространенный способ
представления отрицательных чисел. Он позволяет заменить операцию вычитания на
операцию сложения и сделать операции сложения и вычитания одинаковыми для
знаковых и беззнаковых чисел.
В дополнительном коде (как и в прямом и
обратном) старший разряд отводится для представления знака числа (знаковый
бит).
Диапазон десятичных чисел которые можно
записать в дополнительном коде от -128 до +127. Запись положительных двоичных
чисел в дополнительном коде таже, что и в прямом и обратном кодах.
Дополнительный код отрицательного числа
можно получить двумя способами
1-й
способ:
- инвертируем значение отрицательного числа,
записанного в прямом коде (знаковый бит не трогаем)
- к полученной инверсии прибавляем 1
Пример:
Дано десятичное число -10
Переводим в прямой код:
10 = 0000 1010 ----> -10 = 1000 1010
Инвертируем значение (получаем обратный
код):
1000 1010 ----> 1111 0101
К полученной инверсии прибавляем 1:
1111 0101 + 1 = 1111 0110 - десятичное
число -10 в дополнительном коде
2-й
способ:
Вычитание числа из нуля
Дано десятичное число 10, необходимо
получить отрицательное число (-10) в дополнительном двоичном коде
Переводим 10 в двоичное число:
10 = 0000 1010
Вычитаем из нуля:
0 - 0000 1010 = 1111 0110 - десятичное
число -10 в дополнительном коде.
Арифметические
операции с отрицательными числами в дополнительном коде
Дано: необходимо сложить два числа -10 и
5
-10 + 5 = -5
Решение:
5 = 0000 0101
-10 = 1111 0110 (в дополнительном коде)
Складываем:
1111 0110 + 0000 0101 = 1111 1011, что
соответствует числу -5 в дополнительном коде.
Как мы видим на этом примере –
дополнительный код отрицательного двоичного числа наиболее подходит для
выполнения арифметических операций сложения и вычитания отрицательных чисел.