Содержание
- 1 Содержание
- 2 Двоичная запись чисел [ править | править код ]
- 3 Сложение, вычитание и умножение двоичных чисел [ править | править код ]
- 4 Преобразование чисел [ править | править код ]
- 5 Применения [ править | править код ]
- 6 Обобщения [ править | править код ]
- 7 Прямой код
- 8 Обратный код
- 9 Дополнительный код
- 10 Ваша задача будет решена с вашими исходными данными OnLine и бесплатно
Системы счисления в культуре | |
---|---|
Индо-арабская | |
Арабская Тамильская Бирманская |
Кхмерская Лаосская Монгольская Тайская |
Восточноазиатские | |
Китайская Японская Сучжоу Корейская |
Вьетнамская Счётные палочки |
Алфавитные | |
Абджадия Армянская Ариабхата Кириллическая Греческая |
Грузинская Эфиопская Еврейская Акшара-санкхья |
Другие | |
Вавилонская Египетская Этрусская Римская Дунайская |
Аттическая Кипу Майяская Эгейская Символы КППУ |
Позиционные | |
2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 60 | |
Нега-позиционная | |
Симметричная | |
Смешанные системы | |
Фибоначчиева | |
Непозиционные | |
Единичная (унарная) |
Двоичная система счисления — позиционная система счисления с основанием 2. Благодаря непосредственной реализации в цифровых электронных схемах на логических вентилях, двоичная система используется практически во всех современных компьютерах и прочих вычислительных электронных устройствах.
Содержание
Двоичная запись чисел [ править | править код ]
В двоичной системе счисления числа записываются с помощью двух символов ( и 1). Чтобы не путать, в какой системе счисления записано число, его снабжают указателем справа внизу. Например, число в десятичной системе 510, в двоичной 1012. Иногда двоичное число обозначают префиксом 0b или символом & (амперсанд) [1] , например 0b101 или соответственно &101.
В двоичной системе счисления (как и в других системах счисления, кроме десятичной) знаки читаются по одному. Например, число 1012 произносится «один ноль один».
Натуральные числа [ править | править код ]
Натуральное число, записываемое в двоичной системе счисления как ( a n − 1 a n − 2 … a 1 a 0 ) 2 <displaystyle (a_a_dots a_<1>a_<0>)_<2>> , имеет значение:
( a n − 1 a n − 2 … a 1 a 0 ) 2 = ∑ k = 0 n − 1 a k 2 k , <displaystyle (a_a_dots a_<1>a_<0>)_<2>=sum _^a_
- n <displaystyle n>— количество цифр (знаков) в числе,
- a k <displaystyle a_
>— цифры из множества <0,1>, - k <displaystyle k>— порядковый номер цифры.
Отрицательные числа [ править | править код ]
Отрицательные двоичные числа обозначаются так же как и десятичные: знаком «−» перед числом. А именно, отрицательное целое число, записываемое в двоичной системе счисления ( − a n − 1 a n − 2 … a 1 a 0 ) 2 <displaystyle (-a_a_dots a_<1>a_<0>)_<2>> , имеет величину:
( − a n − 1 a n − 2 … a 1 a 0 ) 2 = − ∑ k = 0 n − 1 a k 2 k . <displaystyle (-a_a_dots a_<1>a_<0>)_<2>=-sum _^a_
В вычислительной технике широко используется запись отрицательных двоичных чисел в дополнительном коде.
Дробные числа [ править | править код ]
Дробное число, записываемое в двоичной системе счисления как ( a n − 1 a n − 2 … a 1 a 0 , a − 1 a − 2 … a − ( m − 1 ) a − m ) 2 <displaystyle (a_a_dots a_<1>a_<0>,a_<-1>a_<-2>dots a_<-(m-1)>a_<-m>)_<2>> , имеет величину:
Сложение, вычитание и умножение двоичных чисел [ править | править код ]
+ | 1 | |
---|---|---|
1 | ||
1 | 1 | 0 (перенос 1 в старший разряд) |
– | 1 | |
---|---|---|
1 | ||
1 | 1(заём из старшего разряда) |
Пример сложения «столбиком» (десятичное выражение 1410 + 510 = 1910 в двоичном виде выглядит как 11102 + 1012 = 100112):
+ | 1 | 1 | 1 | |
1 | 1 | |||
1 | 1 | 1 |
× | 1 | |
---|---|---|
1 | 1 |
Пример умножения «столбиком» (десятичное выражение 1410 * 510 = 7010 в двоичном виде выглядит как 11102 * 1012 = 10001102):
× | 1 | 1 | 1 | |||
1 | 1 | |||||
+ | 1 | 1 | 1 | |||
1 | 1 | 1 | ||||
1 | 1 | 1 |
Преобразование чисел [ править | править код ]
Для преобразования из двоичной системы в десятичную используют следующую таблицу степеней основания 2:
1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Начиная с цифры 1 все цифры умножаются на два. Точка, которая стоит после 1, называется двоичной точкой.
Преобразование двоичных чисел в десятичные [ править | править код ]
Допустим, дано двоичное число 1100012. Для перевода в десятичное запишите его как сумму по разрядам следующим образом:
То же самое чуть иначе:
Можно записать это в виде таблицы следующим образом:
512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 1 | |||||||
+32 | +16 | +0 | +0 | +0 | +1 |
Двигайтесь справа налево. Под каждой двоичной единицей напишите её эквивалент в строчке ниже. Сложите получившиеся десятичные числа. Таким образом, двоичное число 1100012 равнозначно десятичному 4910.
Преобразование дробных двоичных чисел в десятичные [ править | править код ]
Нужно перевести число 1011010,1012 в десятичную систему. Запишем это число следующим образом:
1 * 2 6 + * 2 5 + 1 * 2 4 + 1 * 2 3 + * 2 2 + 1 * 2 1 + * 2 0 + 1 * 2 −1 + * 2 −2 + 1 * 2 −3 = 90,625
То же самое чуть иначе:
64 | 32 | 16 | 8 | 4 | 2 | 1 | 0.5 | 0.25 | 0.125 | |
1 | 1 | 1 | 1 | , | 1 | 1 | ||||
+64 | +0 | +16 | +8 | +0 | +2 | +0 | +0.5 | +0 | +0.125 |
Преобразование методом Горнера [ править | править код ]
Для того, чтобы преобразовывать числа из двоичной в десятичную систему данным методом, надо суммировать цифры слева направо, умножая ранее полученный результат на основу системы (в данном случае 2). Методом Горнера обычно переводят из двоичной в десятичную систему. Обратная операция затруднительна, так как требует навыков сложения и умножения в двоичной системе счисления.
Например, двоичное число 10110112 переводится в десятичную систему так:
То есть в десятичной системе это число будет записано как 91.
Перевод дробной части чисел методом Горнера [ править | править код ]
Цифры берутся из числа справа налево и делятся на основу системы счисления (2).
Преобразование десятичных чисел в двоичные [ править | править код ]
Допустим, нам нужно перевести число 19 в двоичное. Вы можете воспользоваться следующей процедурой :
19/2 = 9 с остатком 1
9/2 = 4 c остатком 1
4/2 = 2 без остатка
2/2 = 1 без остатка
1/2 = 0 с остатком 1
Итак, мы делим каждое частное на 2 и записываем остаток в конец двоичной записи. Продолжаем деление до тех пор, пока в частном не будет 0. Результат записываем справа налево. То есть нижняя цифра (1) будет самой левой и т. д. В результате получаем число 19 в двоичной записи: 10011.
Преобразование дробных десятичных чисел в двоичные [ править | править код ]
Если в исходном числе есть целая часть, то она преобразуется отдельно от дробной. Перевод дробного числа из десятичной системы счисления в двоичную осуществляется по следующему алгоритму:
- Дробь умножается на основание двоичной системы счисления (2);
- В полученном произведении выделяется целая часть, которая принимается в качестве старшего разряда числа в двоичной системе счисления;
- Алгоритм завершается, если дробная часть полученного произведения равна нулю или если достигнута требуемая точность вычислений. В противном случае вычисления продолжаются над дробной частью произведения.
Пример: Требуется перевести дробное десятичное число 206,116 в дробное двоичное число.
Перевод целой части дает 20610=110011102 по ранее описанным алгоритмам. Дробную часть 0,116 умножаем на основание 2, занося целые части произведения в разряды после запятой искомого дробного двоичного числа:
0,116 • 2 = ,232
0,232 • 2 = ,464
0,464 • 2 = ,928
0,928 • 2 = 1,856
0,856 • 2 = 1,712
0,712 • 2 = 1,424
0,424 • 2 = ,848
0,848 • 2 = 1,696
0,696 • 2 = 1,392
0,392 • 2 = ,784
и т. д.
Получим: 206,11610 ≈ 11001110,00011101102
Применения [ править | править код ]
В цифровых устройствах [ править | править код ]
Двоичная система используется в цифровых устройствах, поскольку является наиболее простой и соответствует требованиям:
- Чем меньше значений существует в системе, тем проще изготовить отдельные элементы, оперирующие этими значениями. В частности, две цифры двоичной системы счисления могут быть легко представлены многими физическими явлениями: есть ток (ток больше пороговой величины) — нет тока (ток меньше пороговой величины), индукция магнитного поля больше пороговой величины или нет (индукция магнитного поля меньше пороговой величины) и т. д.
- Чем меньше количество состояний у элемента, тем выше помехоустойчивость и тем быстрее он может работать. Например, чтобы закодировать три состояния через величину напряжения, тока или индукции магнитного поля, потребуется ввести два пороговых значения и два компаратора,
В вычислительной технике широко используется запись отрицательных двоичных чисел в дополнительном коде. Например, число −510 может быть записано как −1012 но в 32-битном компьютере будет храниться как 111111111111111111111111111110112.
В английской системе мер [ править | править код ]
При указании линейных размеров в дюймах по традиции используют двоичные дроби, а не десятичные, например: 5¾″, 7 15 / 16″, 3 11 / 32″ и т. д.
Обобщения [ править | править код ]
Двоичная система счисления является комбинацией двоичной системы кодирования и показательной весовой функции с основанием равным 2. Следует отметить, что число может быть записано в двоичном коде, а система счисления при этом может быть не двоичной, а с другим основанием. Пример: двоично-десятичное кодирование, в котором десятичные цифры записываются в двоичном виде, а система счисления — десятичная.
Популярное
- Устройство и программирование микроконтроллеров AVR для начинающих – 143
- Трехканальный термостат, терморегулятор, таймер на ATmega8 – 70
- Двухканальный термостат, терморегулятор на ATmega8 – 67
Прямой код двоичного числа
Обратный код двоичного числа
Дополнительный код двоичного числа
Прямой, обратный и дополнительный коды двоичного числа — способы представления двоичных чисел с фиксированной запятой в компьютерной (микроконтроллерной) арифметике, предназначенные для записи отрицательных и неотрицательных чисел
Мы знаем, что десятичное число можно представить в двоичном виде. К примеру, десятичное число 100 в двоичном виде будет равно 1100100, или в восьмибитном представлении 0110 0100. А как представить отрицательное десятичное число в двоичном виде и произвести с ним арифметические операции? Для этого и предназначены разные способы представления чисел в двоичном коде.
Сразу отмечу, что положительные числа в двоичном коде вне зависимости от способа представления (прямой, обратный или дополнительный коды) имеют одинаковый вид.
Прямой код
Прямой код — способ представления двоичных чисел с фиксированной запятой. Главным образом используется для записи неотрицательных чисел
Прямой код используется в двух вариантах.
В первом (основной) — для записи только неотрицательных чисел:
В этом варианте (для восьмибитного двоичного числа) мы можем записать максимальное число 255 (всего чисел 256 — от 0 до 255)
Второй вариант — для записи как положительных, так и отрицательных чисел.
В этом случае старший бит (в нашем случае — восьмой) объявляется знаковым разрядом (знаковым битом).
При этом, если:
— знаковый разряд равен 0, то число положительное
— знаковый разряд равен 1, то число отрицательное
В этом случае диапазон десятичных чисел, которые можно записать в прямом коде составляет от — 127 до +127:
Подводя итоги вопроса, не влезая в его дебри, скажу одно:
Прямой код используется главным образом для представления неотрицательных чисел.
Использование прямого кода для представления отрицательных чисел является неэффективным — очень сложно реализовать арифметические операции и, кроме того, в прямом коде два представления нуля — положительный ноль и отрицательный ноль (чего не бывает):
Обратный код
Обратный код — метод вычислительной математики, позволяющий вычесть одно число из другого, используя только операцию сложения.
Обратный двоичный код положительного числа состоит из одноразрядного кода знака (битового знака) — двоичной цифры 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 = 0 001 1001
-25= 1 110 0110
и складываем два числа:
0 110 0100 (100) + 1 110 0110 (-25) = 1 0 100 1010, отбрасываем старшую 1 (у нас получился лишний 9-й разряд — переполнение), = 0 100 1010
2-й этап
Отброшенную в результате старшую единицу прибавляем к результату:
0 100 1010 + 1 = 0 100 1011 (знаковый бит = 0 , значит число положительное), что равно 75 в десятичной системе
2-й пример (для отрицательного результата)
Дано два числа:
5 = 0000 0101
-10 = — 0000 1010
Необходимо их сложить:
5 + (-10) = 5 — 10 = -5
1-й этап
Переводим число -10 в двоичное число в обратном коде:
10 = 0 000 1010
-10= 1 111 0101
и складываем два числа:
0 000 0101 (5) + 1 111 0101 (-10) = 1 111 1010 (знаковый бит = 1 , значит число отрицательное)
2-й этап
Раз результат получился отрицательный, значит число представлено в обратном коде.
Переводим результат в прямой код (путем инвертирования значения, знаковый бит не трогаем):
1 111 1010 —-> 1 000 0101
Проверяем:
1 000 0101 = — 0000 0101 = -5
Обратный код решает проблему сложения и вычитания чисел с различными знаками, но и имеет свои недостатки:
— арифметические операции проводятся в два этапа
— как и в прямом коде два представления нуля — положительный и отрицательный
Дополнительный код
Дополнительный код — наиболее распространенный способ представления отрицательных чисел. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел.
В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).
Диапазон десятичных чисел которые можно записать в дополнительном коде от -128 до +127. Запись положительных двоичных чисел в дополнительном коде та-же, что и в прямом и обратном кодах.
Дополнительный код отрицательного числа можно получить двумя способами
1-й способ:
— инвертируем значение отрицательного числа, записанного в прямом коде (знаковый бит не трогаем)
— к полученной инверсии прибавляем 1
Пример:
Дано десятичное число -10
Переводим в прямой код:
10 = 0 000 1010 —-> -10 = 1 000 1010
Инвертируем значение (получаем обратный код):
1 000 1010 —-> 1 111 0101
К полученной инверсии прибавляем 1:
1 111 0101 + 1 = 1 111 0110 — десятичное число -10 в дополнительном коде
2-й способ:
Вычитание числа из нуля
Дано десятичное число 10, необходимо получить отрицательное число (-10) в дополнительном двоичном коде
Переводим 10 в двоичное число:
10 = 0 000 1010
Вычитаем из нуля:
0 — 0000 1010 = 1 111 0110 — десятичное число -10 в дополнительном коде
Арифметические операции с отрицательными числами в дополнительном коде
Дано: необходимо сложить два числа -10 и 5
-10 + 5 = -5
Решение:
5 = 0000 0101
-10 = 1111 0110 (в дополнительном коде)
Складываем:
1111 0110 + 0000 0101 = 1111 1011, что соответствует числу -5 в дополнительном коде
Как мы видим на этом примере — дополнительный код отрицательного двоичного числа наиболее подходит для выполнения арифметических операций сложения и вычитания отрицательных чисел.
Вывод:
1. Для арифметических операций сложения и вычитания положительных двоичных чисел наиболее подходит применение прямого кода
2. Для арифметических операций сложения и вычитания отрицательных двоичных чисел наиболее подходит применение дополнительного кода
(27 голосов, оценка: 4,89 из 5)
Ваша задача будет решена с вашими исходными данными OnLine и бесплатно
Задача:
Выполнить сложение чисел A = 10112 и B = -110012 в двоичной системе счисления.
Решение:
1) Впишем число "A" в 8-ми разрядный регистр, начиная с младших разрядов (нумерация разрядов начинается с нуля). В недостающие разряды записываем нули.
Разр. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
A | 1 | 1 | 1 |
2) Впишем число "В" в 8-ми разрядный регистр, начиная с младших разрядов. В недостающие разряды записываем нули.
Разр. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
B | 1 | 1 | 1 |
Но, так как число "B" отрицательное, то нам необходимо учесть этот факт при сложении. Для этого представим наше число в дополнительном коде. Перевод в дополнительный код осуществим в два этапа:
2.1) Вначале получим обратный код. Для этого просто проинвертируем каждый разряд регистра (заменим "0" на "1", а "1" на "0").
Разр. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Bобр | 1 | 1 | 1 | 1 | 1 |
2.2) Прибавим к числу в обратном коде единицу и получим дополнительный код.
Разр. | c | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Bобр | 1 | 1 | 1 | 1 | 1 | ||||
+ | 1 | ||||||||
Bдоп | 1 | 1 | 1 | 1 | 1 | 1 |
Обратите внимание! Поскольку мы используем знаковую модель чисел, у нас 7-й разряд является знаковым разрядом и хранит знак числа. при этом "0" соответствует знаку "+" (число положительное), а "1" соответствует знаку "-" (число отрицательное). При этом старшим разрядом для чисел является 6-й разряд.
3) Сложим поразрядно числа "A" и "Bдоп" записывая результат в "C" начиная с младших разрядов. Правила поразрядного сложения, для двоичной системы счисления несложно вывести, рассуждая следующим образом.
Если соответствующие разряды обоих слагаемых содержат нули, то и сумма ноль. В тот же разряд числа "C" ставим ноль.
Если в соответствующих разрядах только одно из слагаемых содержит единицу, то и сумма единица. В тот же разряд числа "C" ставим единицу.
Если соответствующие разряды обоих слагаемых содержат единицы, то сумма двух единиц дает число два, которое в двоичной системе отображается как 102, т.е. это уже двухразрядное число с нулем в младшем разряде. Поэтому в тот же разряд числа "C" ставим ноль, а единицу переносим в следующий разряд.
В общем случае при вычислении значений каждого разряда (кроме нулевого), следует учитывать возможную единицу переноса из предыдущего разряда. Полный набор правил двоичного поразрядного сложения представлен в таблице.
Перенос из предыдущего разряда Oi-1 |
Ai | Bi | Ci | Перенос в следующий разряд Oi-1 |
1 | 1 | |||
1 | 1 | |||
1 | 1 | 1 | ||
1 | 1 | |||
1 | 1 | 1 | ||
1 | 1 | 1 | ||
1 | 1 | 1 | 1 | 1 |
Весь процесс сложения наших чисел выглядит следующим образом:
(красным шрифтом показаны переносы в соответствующий разряд)
Разр. | c | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
1 | 1 | 1 | 1 | ||||||
A | 1 | 1 | 1 | ||||||
Bдоп | 1 | 1 | 1 | 1 | 1 | 1 | |||
C | 1 | 1 | 1 | 1 | 1 |
Обратите внимание! Знаковые разряды участвуют в операции сложения наравне со всеми остальными разрядами.
4) Анализируем переполнение разрядной сетки. Для этого смотрим переносы в знаковый разряд и из знакового (в разряд "с"). Если они имеют одинаковый статус (оба есть или обоих нет), то все нормально переполнения нет. В нашем случае статус переносов одинаковый, результат операции корректен. В регистре "C" содержится сумма исходных чисел
5) Анализируем знак результата (7-й разряд). В нашем случае это "1", значит результат есть число отрицательное и следовательно представлено в дополнительном коде. Переведем его в прямой код в два этапа:
5.1) Проинвертируем (заменим "0" на "1", а "1" на "0") каждый разряд результата C = 11110010 и получим Ci = 00001101
5.2) Прибавим к числу "Сi" единицу и получим прямой код.
Разр. | c | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
1 | |||||||||
Сi | 1 | 1 | 1 | ||||||
+ | 1 | ||||||||
Спр | 1 | 1 | 1 |
Помним о том, что результирующее число отрицательное, т.е. Спр = -1110
Ответ: 10112 + -110012 = -11102