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

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

  • автор:

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

Чисто технически было бы очень сложно сделать компьютер, который бы «понимал» десятичные числа. А вот сделать компьютер, который понимает двоичные числа достаточно легко. Двоичное число оперирует только двумя цифрами – 0 и 1. Несложно сопоставить с этими цифрами два состояния – вЫключено и включено (или нет напряженияесть напряжение). Процессор – это микросхема с множеством выводов. Если принять, что отсутствие напряжения на выводе – это 0 (ноль), а наличие напряжения на выводе – это 1 (единица), то каждый вывод может работать с одной двоичной цифрой. Сейчас мы говорим о процессоре очень упрощённо, потому что мы изучаем не процессоры, а системы исчисления. Об устройстве процессора вы можете почитать здесь: Структура процессора.

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

Итак, процессор (и компьютер в целом) использует двоичную систему, которая оперирует всего двумя цифрами: 0 и 1. И поэтому основание двоичной системы равно 2. Аналогично, основание десятичной системы равно 10, так как там используются 10 цифр.

Каждая цифра в двоичном числе называется бит (или разряд). Четыре бита – это полубайт (или тетрада), 8 бит – байт, 16 бит – слово, 32 бита – двойное слово. Запомните эти термины, потому что в программировании они используются очень часто. Возможно, вам уже приходилось слышать фразы типа слово данных или байт данных. Теперь, я надеюсь, вы понимаете, что это такое.

Отсчёт битов в числе начинается с нуля и справа. То есть в двоичном числе самый младший бит (нулевой бит) является крайним справа. Слева находится старший бит. Например, в слове старший бит – это 15-й бит, а в байте – 7-й. В конец двоичного числа принято добавлять букву b. Таким образом вы (и ассемблер) будете знать, что это двоичное число. Например,

101 – это десятичное число 101b – это двоичное число, которое эквивалентно десятичному числу 5.

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

Ноль, он и в Африке ноль. Здесь вопросов нет. Но что дальше. А дальше разряды двоичного числа заполняются по мере увеличения этого числа. Для примера рассмотрим тетраду. Тетрада (или полубайт) имеет 4 бита.

Двоичное Десятичное Пояснения
0000 0
0001 1 В младший бит устанавливается 1.
0010 2 В следующий бит (бит 1) устанавливается 1, предыдущий бит (бит 0) очищается.
0011 3 В младший бит устанавливается 1.
0100 4 В следующий бит (бит 2) устанавливается 1, младшие биты (бит 0 и 1) очищаются.
0101 5 В младший бит устанавливается 1.
0110 6 Продолжаем в том же духе.
0111 7 .
1000 8 .
1001 9 .
1010 10 .
1011 11 .
1100 12 .
1101 13 .
1110 14 .
1111 15 .

Итак, мы видим, что при формировании двоичных чисел разряды числа заполняются нулями и единицами в определённой последовательности:

Если младший равен нулю, то мы записываем туда единицу. Если в младшем бите единица, то мы переносим её в старший бит, а младший бит очищаем. Тот же принцип действует и в десятичной системе:

0…9 10 – очищаем младший разряд, а в старший добавляем 1

Всего для тетрады у нас получилось 16 комбинаций. То есть в тетраду можно записать 16 чисел от 0 до 15. Байт – это уже 256 комбинаций и числа от 0 до 255. Ну и так далее. На рис. 2.2 показано наглядно представление двоичного числа (двойное слово).

Двоичное число

Рис. 2.2. Двоичное число.

Как задать число в двоичном виде на 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 золотой знак 10 10 серебряных знаков 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 в режиме «Программист»:

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

В двоичной системе счисления используются всего две цифры 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

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

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

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

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

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

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

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