Как выделить цифру в двоичной системе счисления
Перейти к содержимому

Как выделить цифру в двоичной системе счисления

  • автор:

ДРОБНЫЕ ЧИСЛА В ДВОИЧНОЙ СИСТЕМЕ СЧИСЛЕНИЯ

В любой системе счисления нужно уметь представлять не только целые числа, но и дробные. С математической точки зрения это ординарная задача, которая давно решена. Однако с точки зрения компьютерной техники это далеко не тривиальная проблема, во многом связанная с архитектурой компьютера. Ресурсы компьютеров не бесконечны, и основной трудностью является представление периодических и непериодических дробей. Следовательно, такие дроби следует округлять, задавать класс точности участвующих (и могущих появиться в результате вычислений!) чисел без потери точности вычислений, а также следить за тем, чтобы потеря точности не произошла при переводе чисел из одной системы счисления в другую. Особенно важно аккуратно производить вычисления при операциях с плавающей точкой.

Запишем формулу представления дробного числа в позиционной системе счисления:

Ap = an-1·p n-1 +an-2·p n-2 + . + a1·p 1 +a0·p 0 +a-1·p -1 +a-2·p -2 + . + a-m·p -m , [4.1]

В случае десятичной системы счисления получим:

24,732 = 2·10 1 +4·10 0 +7·10 -1 +3·10 -2

Перевод дробного числа из двоичной системы счисления в десятичную производится по следующей схеме:

101101,1012 = 1·2 5 +0·2 4 +1·2 3 +1·2 2 +0·2 1 +1·2 0 +1·2 -1 +0·2 -2 +1·2 -3 =45,625

Перевод дробного числа из десятичной системы счисления в двоичную осуществляется по следующему алгоритму:

Пример: Требуется перевести дробное десятичное число 206,116 в дробное двоичное число.

Перевод целой части дает 20610=110011102 по ранее описанным алгоритмам; дробную часть умножаем на основание 2, занося целые части произведения в разряды после запятой искомого дробного двоичного числа:

.116 • 2 = 0.232 .232 • 2 = 0.464 .464 • 2 = 0.928 .928 • 2 = 1.856 .856 • 2 = 1.712 .712 • 2 = 1.424 .424 • 2 = 0.848 .848 • 2 = 1.696 .696 • 2 = 1.392 .784 • 2 = 0.784 и т.д.

Получим: 20610=11001110,00011101102

Таблицу степеней первых восьми отрицательных степеней двойки можно посмотреть в Приложении.

Двоичная система счисления

В двоичной системе счисления используются всего две цифры 0 и 1. Другими словами, десятичная двойка является основанием двоичной системы счисления, аналогично тому, как в десятичной системе основанием является число десять.

Чтобы научиться считать в двоичной системе счисления, рассмотрим, как формируются числа в привычной для нас десятичной.

В десятичной системе счисления мы располагаем десятью знаками-цифрами: от 0 до 9. Когда счет достигает числа 9, вводится новый более старший разряд – десятки. При этом разряд единиц обнуляется и счет в этом разряде опять начинается с нуля. После числа 19 разряд десятков увеличивается на 1, а разряд единиц снова обнуляется. Получается число 20. Когда десятки дойдут до 9, впереди них появится третий разряд – сотни.

Формирование каждого последующего числа в двоичной системе счисления аналогично тому, как это происходит в десятичной за исключением того, что используются всего-лишь две цифры: 0 и 1. Как только разряд достигает своего предела, то есть единицы, появляется новый разряд, а старый обнуляется.

0 1 10 11 100 101 110 111

Итак, число три в двоичной системе записывается как 11, в десятичной – как 3. Количественно это одинаковые числа. Это одно и то же число, выраженное в различных системах счисления. Если есть вероятность неоднозначной трактовки числа, к нему приписывается нижний индекс в десятичной системе счисления, обозначающий, в какой системе счисления выражено данное число:

Индекс для числа, выраженного в десятичной системе, обычно опускается.

Перевод чисел из двоичной системы счисления в десятичную

В двоичной системе счисления с увеличением значения количество разрядов растет очень быстро. Как определить, что значит двоичное число 10001001? Нам сложно понять, сколько это, мы привыкли мыслить в десятичной системе. Поэтому часто используется перевод двоичных чисел в десятичные.

В десятичной системе счисления любое число можно представить в форме суммы единиц, десяток, сотен и так далее. Например:

5476 = 5000 + 400 + 70 + 6

Можно пойти еще дальше и разложить число, используя основание системы счисления, возводимое в показатель степени, равный разряду цифры, уменьшенному на единицу:

5476 = 5 * 10 3 + 4 * 10 2 + 7 * 10 1 + 6 * 10 0

После равенства числа 5, 4, 7 и 6 – это набор цифр из которых состоит число 5476. Все эти цифры умножаются на десять, возведенную в ту или иную степень. Десять – это основание десятичной системы счисления. Степень, в которую возводится десятка – это разряд цифры за минусом единицы. Так, например, 6 находится в первом разряде, поэтому она умножается на 10 (1-1) . Натуральное число в нулевой степени равно единице. Таким образом, мы умножаем 6 на 1.

Точно также производится разложение числа в двоичной системы счисления, кроме того, что основанием выступает двойка, а не десятка. Здесь до знака равенства число представлено в двоичной системе счисления, после «равно» запись идет в десятичной:

10001001 = 1 * 2 7 + 0 * 2 6 + 0 * 2 5 + 0 * 2 4 + 1 * 2 3 + 0 * 2 2 + 0 * 2 1 + 1 * 2 0

Результат вычислений дает десятичное число, количественно равное двоичному 10001001:

1*2 7 + 0*2 6 + 0*2 5 + 0*2 4 + 1*2 3 + 0*2 2 + 0*2 1 + 1*2 0 =
= 128 + 0 + 0 + 0 + 8 + 0 + 0 + 1 = 137

То есть число 10001001 по основанию 2 равно числу 137 по основанию 10:

Почему двоичная система счисления так распространена?

Дело в том, что двоичная система счисления – это язык современной вычислительной техники.

Когда любые данные сохраняются на компьютере, они кодируются числами. С числами же компьютер выполняет операции, изменяя эти данные.

Допустим, у нас есть десятичное число 14, которое требуется сохранить в компьютерной памяти. Мы задействуем участок памяти, в данном случае состоящий как минимум из двух элементов, отводимых под разряды. В одном из разрядов мы сохраняем десятичное число 1, в другом – число 4.

Элемент памяти – это физическое устройство. Если проектировать его для хранения десятичной цифры, потребуется создать такое устройство, которое может находиться в десяти разных физических состояниях и способно переключаться между ними. Каждое из этих состояний будет соответствовать числу от 0 до 9.

Создать такой элемент памяти возможно, однако сложнее и дороже, чем создать элемент, способный находиться только в двух состояниях. Одно состояние сопоставить нулю, второе – единице. Кроме того, подобное хранение данных является более надежным.

Поэтому оказалось проще перевести число 14 в двоичную систему счисления, получив число 1110, и именно его сохранить в памяти. И пусть даже при этом будут задействованы не два, а четыре разряда, то есть четыре элементарных единиц памяти.

Перевод десятичного числа в двоичное

Одним из алгоритмов перевода десятичного числа в двоичное является деление нацело на два с последующим «сбором» двоичного числа из остатков. Переведем таким образом число 14 в двоичное представление.

14 / 2 = 7, остаток 0 7 / 2 = 3, остаток 1 3 / 2 = 1, остаток 1 1 / 2 = 0, остаток 1

Собирать остатки надо с конца, то есть с последнего деления. Получаем 1110.

Выполним то же самое для числа 77:

77 / 2 = 38, остаток 1 38 / 2 = 19, остаток 0 19 / 2 = 9, остаток 1 9 / 2 = 4, остаток 1 4 / 2 = 2, остаток 0 2 / 2 = 1, остаток 0 1 / 2 = 0, остаток 1

Собираем остатки вместе, начиная с конца: 1001101.

Проверим, выполнив обратный перевод:

1001101 = 1*2 6 + 0*2 5 + 0*2 4 + 1*2 3 + 1*2 2 + 0*2 1 + 1*2 0 = 64 + 0 + 0 + 8 + 4 + 0 + 1 = 77

Двоичная система счисления

Двоичная система счисления - 1

У нас 10 пальцев, и система — десятичная. То есть, любое, сколь угодно большое число мы можем представить с помощью цифр 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. В зависимости от того, где в числе стоит цифра, она может означать разное: если эта цифра последняя, то она расположена в разряде единиц, предпоследняя — разряд десятков, еще левее — разряд сотен и так далее. По сути, любое число можно расписать в виде суммы цифр, каждая из которых умножена на десять в определенной степени. В случае единиц, эта степень — нулевая.

1573 = 3*100 + 7*101 + 5*102 + 1*103.

Число, на степень которого умножаются цифры называется базой системы счисления. Для десятичной системы базой, логично, является десятка.

У компьютера пальцев нет, но есть два состояния: условно «ток идет» и «ток не идет», нулик и единичка. Соответственно все числа (да и вообще информация) в памяти компьютера состоят только из двух цифр — 0 и 1. Их расположение, как и в случае десятичной системы счисления, указывает на разряд. Только теперь число можно разложить на сумму цифр, помноженных не на степени десятки, а степени двойки.

0 в двоичной системе = 0 1 в двоичной системе = 1 2 в двоичной системе = 10 710=1112 

Научитесь переводить из двоичной системы в десятичую. Вы, наверное, уже поняли, как это делается — просто берем цифру числа начиная с самой правой и умножаем её на базу системы счисления в степени, соответствующей её разряду, так с каждым разрядом. Затем складываем все получившиеся таким образом числа.

Пример:

Давайте найдем десятичный аналог двоичного числа 1011012

  • Самая правая единичка = 1*2 0
  • Следующий нулик = 0*2 1
  • Третья справа единичка = 1*2 2
  • Четвертая = 1*2 3
  • … и так далее
1011012 = 1*20 + 0*21 + 1*22 + 1*23 + 0*24 + 1*25 = 1 + 0 + 4 + 8 + 0 + 32 = 4510

Представьте восемь лампочек, выставленных в ряд. У каждой из них — свой собственный выключатель.

Каждая из лампочек — это разряд. Да что представлять, вспомните самую первую лекцию (там есть такой агрегат) или вот вам виджет: cdn.cs50.net/2016/x/psets/0/pset0/bulbs.html

Поиграйтесь с ним, «прочувствуйте» двоичную систему.

Перевод из десятичной системы в двоичную

Тут тоже всё просто, если понимать суть.

Пример:

У нас есть десятичное число 5710. Чтобы перевести его в двоичную систему, нужно определить, какая максимальная степень двойки не превосходит это число.

 26 = 64. Это явно многовато. А вот 25 = 32. 

Мы определили старший разряд. 3210 = 1000002. Теперь ищем следующий разряд. 57-32 = 25. Теперь для 25 ищем степень двойки, которая не превосходит 25. 2 4 = 16. Значит, следующий разряд у нас тоже равен 1. 32+16 = 4810 = 1100002. 57 – 48 = 9. 23 = 8, это меньше, чем 9. Значит следующий разряд тоже будет единичкой.

 32 + 16 + 8 = 5610 = 1110002. 57 - 56 = 1, то есть осталась только одна степень 20. Таким образом, 5710 = 1110012. 

На этом все =) Переходите к следующей лекции!

Как задать число в двоичном виде на C

введите сюда описание изображения

Нужна программа для сверки таблицы истинности В конце это все должно быть выведено через плату и я не понимаю как это надо сделать Как задать число в двоичной форме?

Отслеживать
задан 20 фев 2021 в 7:46
1 1 1 бронзовый знак

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В Си пока нет бинарной записи чисел. Пока можно попробовать макросами такое задавать. А если константные числа не нужны, тогда функцией можно обойтись.

// gcc -Wall -Wextra -Wpedantic -std=c11 binnum.c -o binnum # define BIN2( X1 , X0 ) (((X1) <<1)|(X0)) # define BIN4( X3 , X2 , X1 , X0 ) ((BIN2(X3,X2)<<2)|BIN2(X1,X0)) # define BIN8( X7 , X6 , X5 , X4 , X3 , X2 , X1 , X0 ) \ ((BIN4(X7,X6,X5,X4)<<4)|BIN4(X3,X2,X1,X0)) # include unsigned int bin32(char const * s) < unsigned int r = 0 ; while ( * s ) < r return r ; > int main()
10101010 = 170 10101010 = 170 

Отслеживать
ответ дан 20 фев 2021 в 8:21
17.2k 1 1 золотой знак 9 9 серебряных знаков 33 33 бронзовых знака

Если компилятор у вас относительно новый, поддерживающий C++14 (или GCC), то вот так:

int b = 0b101010; //это 42 в десятичной 

В противном случае, наиболее распространенная практика — перевести число в шестнадцатеричную систему счисления и задать его.

int h = 0x2A; // это тоже 42 

Обратите внимание на префиксы 0b и 0x — именно они сообщают компилятору, что далее за ними следут цифры числа в двоичной или шестнадцатеричной системе счисления соответственно

Для перевода двоичного числа в шестнадцатеричную систему счисления заметим, что один разряд шестнадцатеричной системы соответствует ровно четырем разрядом двоичной системы. Таким образом, можно составить себе табличку, а которой будет 16 строк вида

0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F 

далее, режете ваше число на четверки бит справа налево и записываете цифры шестнадцатеричного числа:

1100 0101 = С5 

введите сюда описание изображения

Также для перевода можно использовать калькулятор windows в режиме «Программист»:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *