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

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

Основанием системы счисления служит число 2 (s = 2) и для записи чисел используются только
две цифры: 0 и 1. Чтобы представить любой разряд двоичного числа, достаточно иметь физический элемент
с двумя чётко различными устойчивыми состояниями, одно из которых изображает 1, а другое 0.

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

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

Перевод целого двоичного числа в шестнадцатеричную систему счисления

Пример 1: перевести 1011101 из двоичной системы в шестнадцатеричную.

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

Для перевода двоичного числа 1011101 в десятичную систему, воспользуемся формулой:

A2 = an-1 ∙ 2n-1 + an-2 ∙ 2n-2 + ∙∙∙ + a ∙ 2, отсюда:

10111012=1 ∙ 26 + 0 ∙ 25 + 1 ∙ 24 + 1 ∙ 23 + 1 ∙ 22 + 0 ∙ 21 + 1 ∙ 2 = 1 ∙ 64 + 0 ∙ 32 + 1 ∙ 16 + 1 ∙ 8 + 1 ∙ 4 + 0 ∙ 2 + 1 ∙ 1 = 64 + 0 + 16 + 8 + 4 + 0 + 1 = 9310

Таким образом:

10111012 = 9310

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

Полученные остатки записываем в обратном порядке, таким образом:

9310=5D16

Ответ: 10111012 = 5D16.

Как перевести из одной системы в другую

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

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

  • позиционная нотация;
  • удвоение.

Разбор перевода позиционной нотацией будет происходить на примере числа 10011011.

Первый шаг, чтобы произвести перевод числа из двоичной системы в десятичную — возведение всех чисел выражения в степень. Степень с каждым шагом увеличивается на 1, начинается с 0 справа налево. Выглядит это таким образом: 18 07 06 15 14 03 11 1. После преобразований получается числовой ряд 128, 64, 32, 16, 8, 4, 2, 1, сопоставляется с начальным 10011011.

Каждое число из возведенного в степень примера умножается на цифру примера 10011011 по порядку. Таким образом, 128 умножается на 1, 64 — на 0, 32 — на 0 и т.д. В итоге вычитаются все нулевые значения и остается 128, 16, 8, 2, 1. Для получения ответа в десятичной системе все цифры суммируются. Результат — 155.

Перевод методом удвоения проще для преобразования в уме или на бумаге. Этот способ перевода не использует математические функции со степенями, а только суммирование и простое умножение.

Способ подразумевает суммирование всех результатов, основываясь на многочлене a х 0 + b, где b равняется текущему значению, а — предыдущему. Эта функция применяется для каждого знака ряда 10011011. Для получения первого результата, следует исходить из утверждения, что предыдущее значение перед первой цифрой равняется 0. Следуя из этого, после подставления данных образовывается многочлен 0 х 2 + 1 и дает ответ — 1. Для второй цифры 0 получается многочлен 1 х 2 + 0, ответ — 2. Для третьего знака 0 — многочлен 2 х 2 + 0, ответ, соответственно, 4. Сумма равняется результату перевода в десятичной системе.

Преобразование двоичного числа в дополнительном коде в десятичную форму

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

Если бит знака равен 0, просто преобразуйте число, как было показано выше для чисел без знака.

Если бит знака равен 1, мы инвертируем биты, добавляем 1, затем выполняем преобразование в десятичное число, а затем делаем это десятичное число отрицательным (поскольку бит знака изначально был отрицательным).

Например, чтобы преобразовать 1001 1110 в дополнительном коде в десятичное число:

  1. дано: 1001 1110
  2. инвертируем биты: 0110 0001
  3. добавляем 1: 0110 0010
  4. преобразуем в десятичную форму:(0 * 128) + (1 * 64) + (1 * 32) + (0 * 16) + (0 * 8) + (0 * 4) + (1 * 2) + (0 * 1 ) = 64 + 32 + 2 = 98
  5. поскольку исходный бит знака был отрицательным, окончательное значение равно -98.

Что такое десятичные дроби?

Десятичная система счисления или система счисления с основанием 10 — это система счисления, с которой мы сталкиваемся чаще всего.

В десятичной системе счисления 10 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9.

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

Возьмем число 549.

Крайнее правое число 9 находится в столбце единиц. Это ближайший к десятичной запятой. Цифра 9 означает, что их девять. Следующая цифра справа, 4, находится в столбце 10. Число 4 там означает, что на самом деле число 40. Последнее число, 5, находится в разряде сотен. Это означает, что их 5 сотен (500).

Что такое двоичные файлы?

С другой стороны, двоичная система — это система с основанием 2. В то время как десятичная система имеет значения от 0 до 9, система с основанием 2 (или двоичная) имеет только значения 0 или 1.

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

1, 2, 4, 8, 16, 32, 64 и так далее.

Давайте посмотрим на двоичное число 11.

1 в столбце 1 и 1 в столбце 2. Итак, 1 + 2 = 3.

Число 11 = 3.

Давайте попробуем другой номер: 1101.

1 в столбце 1, 0 в столбце 2, 1 в столбце 4 и 1 в столбце 8.

Итак, имеем 1 + 4 + 8 = 13.

Число 1101 = 13.

Почему типы имеют значение

Рассмотрим двоичное значение 1011 0100. Какое значение оно представляет? Вы, вероятно, сказали бы 180, и если бы это было стандартное двоичное число без знака, вы были бы правы.

Однако, если бы это значение было сохранено с использованием дополнительного кода, оно было бы равно -76.

А если бы значение было закодировано другим способом, оно могло быть чем-то совсем другим.

Итак, как C++ узнает, печатать ли переменную, содержащую двоичный код 1011 0100, как 180 или -76?

Здесь в игру вступают типы. Тип переменной определяет, как значение переменной кодируется в двоичном формате и декодируется обратно в десятичное представление. Таким образом, если тип переменной был целочисленным без знака, компилятор знал бы, что 1011 0100 было стандартным двоичным значением и должно быть напечатано как 180. Если бы переменная была целочисленного типа со знаком, компилятор знал бы, что 1011 0100 было закодировано с использованием дополнительного кода (в C++20 теперь это гарантировано) и должно быть напечатано как -76.

4.9. Сводная таблица переводов целых чисел из одной системы счисления в другую

Рассмотрим только те системы счисления, которые применяются в компьютерах —
десятичную, двоичную, восьмеричную и шестнадцатеричную.

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

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

На этом рисунке использованы следующие обозначения:

  • в кружках записаны основания систем счисления;
  • стрелки указывают направление перевода;
  • номер рядом со стрелкой означает порядковый номер соответствующего примера
    в сводной таблице 4.1.

Например:
означает перевод из двоичной системы в шестнадцатеричную, имеющий в таблице
порядковый номер 6.

Сводная таблица переводов целых чисел

Таблица 4.1.


Восьмеричная и шестнадцатеричная системы счисления

Эти системы счисления относятся к двоично-кодированным, в которых основание системы счисления
представляет собой целую степень двойки: —
для восьмеричной и — для шестнадцатеричной.

В восьмеричной системе счисления(s = 8) используются 8 цифр: 0, 1, 2, 3, 4, 5, 6, 7.

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

В шестнадцатеричной системе счисления (s = 16) используются 16 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

Пример записи числа в шестнадцатеричной системе:

Широкое применение восьмеричной и шестнадцатеричной систем счисления обусловлено двумя факторами.

Во-первых, эти системы позволяют заменить запись двоичного числа более компактным представлением
(запись числа в восьмеричной и шестнадцатеричной системах будет соответственно в 3 и 4 раза короче двоичной записи этого числа).
Во-вторых, взаимное преобразование чисел между двоичной системой с одной стороны и восьмеричной и шестнадцатиречной — с другой
осуществляется сравнительно просто. Действительно, поскольку для восьмеричного числа каждый разряд представляется
группой из трёх двоичных разрядов (триад), а для шестнадцатеричного — группой из четырёх двоичных разрядов (тетрад),
то для преобразования двоичного числа достаточно объединить его цифры в группы по 3 или 4 разряда соответственно, продвигаясь от
разделительной запятой вправо и влево. При этом, в случае необходимости, добавляют нули слева от целой части
и/или справа от дробной части и каждую такую группу — триаду или тетраду — заменяют эвивалентной восьмеричной или
шестнадцатеричной цифрой (см. таблицу).

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

Соответствие между цифрами в различных системах счисления

DEC
BIN
OCT
HEX
BCD
0000
0000
1
0001
1
1
0001
2
0010
2
2
0010
3
0011
3
3
0011
4
0100
4
4
0100
5
0101
5
5
0101
6
0110
6
6
0110
7
0111
7
7
0111
8
1000
10
8
1000
9
1001
11
9
1001
10
1010
12
A
0001 0000
11
1011
13
B
0001 0001
12
1100
14
C
0001 0010
13
1101
15
D
0001 0011
14
1110
16
E
0001 0100
15
1111
17
F
0001 0101

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

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

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

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

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

Целую часть числа переводится из десятичной СС в другую систему счисления — последовательным делением целой части числа на основание системы счисления (для двоичной СС — на 2, для 8-ичной СС — на 8, для 16-ичной — на 16 и т.д.) до получения целого остатка, меньше, чем основание СС.

Пример 4. Переведем число 159 из десятичной СС в двоичную СС:

159 2            
158 79 2          
1 78 39 2        
  1 38 19 2      
    1 18 9 2    
      1 8 4 2  
        1 4 2 2
          2 1

Рис. 1

Как видно из Рис. 1, число 159 при делении на 2 дает частное 79 и остаток 1. Далее число 79 при делении на 2 дает частное 39 и остаток 1 и т.д. В результате построив число из остатков деления (справа налево) получим число в двоичной СС: 10011111. Следовательно можно записать:

Пример 5. Переведем число 615 из десятичной СС в восьмеричную СС.

615 8    
608 76 8  
7 72 9 8
  4 8 1
    1  

Рис. 2

При приведении числа из десятичной СС в восьмеричную СС, нужно последовательно делить число на 8, пока не получится целый остаток меньшее, чем 8. В результате построив число из остатков деления (справа налево) получим число в восьмеричной СС: 1147(см. Рис. 2). Следовательно можно записать:

Пример 6. Переведем число 19673 из десятичной системы счисления в шестнадцатеричную СС.

19673 16    
19664 1229 16  
9 1216 76 16
  13 64 4
    12  

Рис. 3

Как видно из рисунка Рис.3, последовательным делением числа 19673 на 16 получили остатки 4, 12, 13, 9. В шестнадцатеричной системе счисления числе 12 соответствует С, числе 13 — D. Следовательно наше шестнадцатеричное число — это 4CD9.

Далее рассмотрим перевод правильных десятичных дробей в двоичную СС, в восьмеричную СС, в шестнадцатеричную СС и т.д.

Для перевода правильных десятичных дробей (вещественное число с нулевой целой частью) в систему счисления с основанием s необходимо данное число последовательно умножить на s до тех пор, пока в дробной части не получится чистый нуль, или же не получим требуемое количество разрядов. Если при умножении получится число с целой частью, отличное от нуля, то эту целую часть не учитывать (они последовательно зачисливаются в результат).

Рассмотрим вышеизложенное на примерах.

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

    0.214
  x 2
  0.428
  x 2
  0.856
  x 2
1   0.712
  x 2
1   0.424
  x 2
  0.848
  x 2
1   0.696
  x 2
1   0.392

Рис. 4

Как видно из Рис.4, число 0.214 последовательно умножается на 2. Если в результате умножения получится число с целой частью, отличное от нуля, то целая часть записывается отдельно (слева от числа), а число записывается с нулевой целой частью. Если же при умножении получиться число с нулевой целой частью, то слева от нее записывается нуль. Процесс умножения продолжается до тех пор, пока в дробной части не получится чистый нуль или же не получим требуемое количество разрядов. Записывая жирные числа (Рис.4) сверху вниз получим требуемое число в двоичной системе счисления: 0.0011011.

Следовательно можно записать:

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

    0.125
  x 2
  0.25
  x 2
  0.5
  x 2
1   0.0

Рис. 5

Для приведения числа 0.125 из десятичной СС в двоичную, данное число последовательно умножается на 2. В третьем этапе получилось 0. Следовательно, получился следующий результат:

Пример 9. Переведем число 0.214 из десятичной системы счисления в шестнадцатеричную СС.

    0.214
  x 16
3   0.424
  x 16
6   0.784
  x 16
12   0.544
  x 16
8   0.704
  x 16
11   0.264
  x 16
4   0.224

Рис. 6

Следуя примерам 4 и 5 получаем числа 3, 6, 12, 8, 11, 4. Но в шестнадцатеричной СС числам 12 и 11 соответствуют числа C и B. Следовательно имеем:

Пример 10. Переведем число 0.512 из десятичной системы счисления в восьмеричную СС.

    0.512
  x 8
4   0.096
  x 8
  0.768
  x 8
6   0.144
  x 8
1   0.152
  x 8
1   0.216
  x 8
1   0.728

Рис. 7

Получили:

Пример 11. Переведем число 159.125 из десятичной системы счисления в двоичную СС. Для этого переведем отдельно целую часть числа (Пример 4) и дробную часть числа (Пример 8). Далее объединяя эти результаты получим:

Пример 12. Переведем число 19673.214 из десятичной системы счисления в шестнадцатеричную СС. Для этого переведем отдельно целую часть числа (Пример 6) и дробную часть числа (Пример 9). Далее объединяя эти результаты получим:

4.1. Что такое система счисления?

Система счисления — это способ записи чисел с помощью заданного
набора специальных знаков (цифр).

Существуют позиционные и непозиционные системы счисления.

В непозиционных системах вес цифры (т.е. тот вклад,
который она вносит в значение числа) не зависит от ее позиции в записи
числа. Так, в римской системе счисления в числе ХХХII (тридцать два) вес цифры Х
в любой позиции равен просто десяти.

В позиционных системах счисления вес каждой цифры
изменяется в зависимости от ее положения
(позиции) в последовательности
цифр, изображающих число. Например, в числе 757,7 первая семерка означает 7
сотен, вторая – 7 единиц, а третья – 7 десятых долей единицы.

Сама же запись числа 757,7 означает сокращенную запись выражения

700 + 50 + 7 + 0,7 = 7•102 + 5•101 + 7•10 +
7•10-1 = 757,7.

Любая позиционная система счисления характеризуется своим основанием.

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

За основание системы можно принять любое натуральное число — два, три, четыре
и т.д. Следовательно, возможно бесчисленное множество позиционных систем:
двоичная, троичная, четверичная и т.д. Запись чисел в каждой из систем счисления
с основанием q означает сокращенную запись выражения

an-1 qn-1 + an-2 qn-2+ …
+ a1 q1 + a q + a-1
q-1 + … + a-m q-m,

где ai – цифры системы счисления; n и
m – число целых и дробных разрядов, соответственно.

Например:

Перевод дробного восьмеричного числа в двоичную систему счисления

Пример 2: перевести 127.25 из восьмеричной в двоичную систему счисления.

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

1. Для перевода числа 127.25 в десятичную систему воспользуемся формулой:

An = an-1 ∙ qn-1 + an-2 ∙ qn-2 + ∙∙∙ + a ∙ q + a-1 ∙ q-1 + ∙∙∙ + a-m ∙ q-m, отсюда:

127.258=1 ∙ 82 + 2 ∙ 81 + 7 ∙ 8 + 2 ∙ 8-1 + 5 ∙ 8-2 = 1 ∙ 64 + 2 ∙ 8 + 7 ∙ 1 + 2 ∙ 0.125 + 5 ∙ 0.015625 = 64 + 16 + 7 + 0.25 + 0.078125 = 87.32812510

Таким образом:

127.258 = 87.32812510

2. Полученное число 87.328125 переведем из десятичной системы счисления в двоичную. Для этого потребуется перевести вначале целую часть, а затем дробную. Таким образом необходимо:

  1. Перевести 87 в двоичную систему;
  2. Перевести 0.328125 в двоичную систему;

2.1 Для того, чтобы перевести число 87 из десятичной системы счисления в двоичную, необходимо осуществить последовательное деление на 2, до тех пор пока остаток не будет меньше 2-х.

Полученные остатки записываем в обратном порядке, таким образом:

8710=10101112

2.2 Для перевода десятичной дроби 0.328125 в двоичную систему, необходимо выполнить последовательное умножение дроби на 2, до тех пор, пока дробная часть не станет равной 0 или пока не будет достигнута заданная точность вычисления. Получаем:

0.328125 ∙ 2 = 0.65625 (0) 0.65625 ∙ 2 = 1.3125 (1) 0.3125 ∙ 2 = 0.625 (0) 0.625 ∙ 2 = 1.25 (1) 0.25 ∙ 2 = 0.5 (0) 0.5 ∙ 2 = 1 (1)

Ответом станет прямая последовательность целых частей произведения. Т.е.

0.32812510=0.0101012

2.3. Осталось соединить переведенные части, таким образом:

87.32812510=1010111.0101012

Ответ: 127.258 = 1010111.0101012.

Перевод дробного двоичного числа в шестнадцатеричную систему счисления

Пример 2: перевести 10001100.110 из двоичной в шестнадцатеричную систему счисления.

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

1. Для перевода числа 10001100.110 в десятичную систему воспользуемся формулой:

An = an-1 ∙ qn-1 + an-2 ∙ qn-2 + ∙∙∙ + a ∙ q + a-1 ∙ q-1 + ∙∙∙ + a-m ∙ q-m, отсюда:

10001100.1102=1 ∙ 27 + 0 ∙ 26 + 0 ∙ 25 + 0 ∙ 24 + 1 ∙ 23 + 1 ∙ 22 + 0 ∙ 21 + 0 ∙ 2 + 1 ∙ 2-1 + 1 ∙ 2-2 + 0 ∙ 2-3 = 1 ∙ 128 + 0 ∙ 64 + 0 ∙ 32 + 0 ∙ 16 + 1 ∙ 8 + 1 ∙ 4 + 0 ∙ 2 + 0 ∙ 1 + 1 ∙ 0.5 + 1 ∙ 0.25 + 0 ∙ 0.125 = 128 + 0 + 0 + 0 + 8 + 4 + 0 + 0 + 0.5 + 0.25 + 0 = 140.7510

Таким образом:

10001100.1102 = 140.7510

2. Полученное число 140.75 переведем из десятичной системы счисления в шестнадцатеричную. Для этого потребуется перевести вначале целую часть, а затем дробную. Таким образом необходимо:

  1. Перевести 140 в шестнадцатеричную систему;
  2. Перевести 0.75 в шестнадцатеричную систему;

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

Полученные остатки записываем в обратном порядке, таким образом:

14010=8C16

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

0.75 ∙ 16 = 12.0 (C)

Т.к. дробная часть 0, продолжать умножение не нужно. Ответом станет 0.12 (0.С). Т.е.

0.7510=0.C16

2.3. Осталось соединить переведенные части, таким образом:

140.7510=8C.C16

Ответ: 10001100.1102 = 8C.C16.

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

В следующих примерах предполагается, что мы имеем дело с целыми числами без знака.

Рассмотрим 8-битное (1 байт) двоичное число 0101 1110. Двоичное 0101 1110 означает (0 * 128) + (1 * 64) + (0 * 32) + (1 * 16) + (1 * 8) + (1 * 4) + (1 * 2) + (0 * 1). Если просуммировать все эти части, мы получим десятичное число 64 + 16 + 8 + 4 + 2 = 94.

Ниже показан тот же процесс в формате таблицы. Мы умножаем каждую двоичную цифру на ее числовое значение (определяемое ее позицией). Суммирование всех этих значений дает нам итоговый результат.

Преобразование 0101 1110 в десятичную форму:

Двоичное число 1 1 1 1 1
* Значение цифры 128 64 32 16 8 4 2 1
= Результат (94) 64 16 8 4 2

Преобразуем 1001 0111 в десятичную форму:

Двоичное число 1 1 1 1 1
* Значение цифры 128 64 32 16 8 4 2 1
= Результат (151) 128 16 4 2 1

1001 0111 в двоичном формате = 151 в десятичном формате.

Этот способ можно легко расширить до 16- или 32-битных двоичных чисел, просто добавив дополнительные столбцы

Обратите внимание, что проще всего начать с правого конца и двигаться влево, умножая значение цифры на 2 по мере продвижения

Как перевести число из десятичной системы в двоичную

Эта задача для перевода числовых знаков, так же как и предыдущая, имеет два варианта решения:

  • вычитание и сравнение уменьшающихся степеней;
  • сокращение с остатком.

Первый способ перевода подразумевает хорошее знание деления на 2. Особенностью способа является то, что при делении образовываются два возможные остатка — 0 и 1. Имено они и формируют числовое значение.

Чтобы перевести число 156 на язык машин, исполняются следующие правила. Для начала сумма делится на 2, что дает результат 78 с нулевым остатком. Первый остаток записывается в двоичное значение. Полученный результат делится снова на 2, что в итоге получается ответ 39 так же с нулевым остатком. Второй остаток записывается в следующий по порядку знак. Половина из числа 39 равняется 19 с остатком 1. После проведения всех операций получается число в двоичной системе — 00111001.

Второй способ формирует числовой ряд из результатов возведения цифры 2 до тех пор, пока это значение не станет больше, чем начальное. Получается последовательность 128, 64, 32, 16, 8, 4, 2, 1. Таким образом, судя по полученным знакам ряда, 156 делится на 128, дает единицу с остатком. Первая цифра в двоичном числе равняется 1. Далее происходит вычитание 128 из 156, что дает ответ 28. Число делится на следующий знак ряда. Таким образом, 26 делится на 64 и это дает 0 с остатком. Это следующее значение в двоичном коде. После проведения всех операций получаем целое двоичное число 00111001_2.

Способ №1.

Допустим, требуется перевести число 637 десятичной системы в двоичную систему.

Делается это следующим образом: отыскивается максимальная степень двойки, чтобы два в этой степени было меньше или равно исходному числу.

В нашем случае это 9, т.к. 29=512, а 210=1024, что больше нашего начального числа. Таким образом, мы получили число разрядов результата. Оно равно 9+1=10. Значит, результат будет иметь вид 1ххххххххх, где вместо х может стоять 1 или 0.

Найдем вторую цифру результата. Возведем двойку в степень 9 и вычтем из исходного числа: 637-29=125. Затем сравниваем с числом 28=256. Так как 125 меньше 256, то девятый разряд будет 0, т.е. результат уже примет вид 10хххххххх.

27=128 > 125, значит и восьмой разряд будет нулём.

26=64, то седьмой разряд равен 1. 125-64=61 Таким образом, мы получили четыре старших разряда и число примет вид 10011ххххх.

25=32 и видим, что 32 < 61, значит шестой разряд равен 1 (результат 100111хххх), остаток 61-32=29.

24=16 < 29 — пятый разряд 1 => 1001111ххх. Остаток 29-16=13.

23=8 < 13 => 10011111хх. 13-8=5

22=4 < 5 => 10011111хх, остаток 5-4=1.

21=2 > 1 => 100111110х, остаток 2-1=1.

2=1 => 1001111101.

Это и будет конечный результат.

1.2 Двоичная

В предыдущем примере мы перевели все десятичные числа в другие системы счислений, одна из которых двоичная. Теперь переведем каждое число с двоичной формы.

1.2.1 Двоичная → Десятичная

Для перевода чисел с двоичной формы в десятичную нужно знать два нюанса. Первый – у каждого нолика и единички есть множитель 2 в n-й степени, при котором n увеличивается справа налево ровно на единичку. Второй – после перемножения все числа нужно сложить и мы получим число в десятичной форме. В итого у нас будет формула такого вида:

Где,D – это число в десятичной форме, которое мы ищем;n – количество символов в двоичном числе;a – число в двоичной форме на n-й позиции (т.е. первый символ, второй, и т.п.);p – коэффициент, равный 2,8 или 16 в степени n (в зависимости от системы счисления)

К примеру возьмем число 110102. Смотрим на формулу и записываем:

  • Число состоит из 5 символов (n=5)
  • a5 = 1, a4 = 1, a3 = 0, a2 = 1, a1 = 0

  • p = 2 (так как переводим из двоичной в десятичную)

В итоге имеем:

Кто привык записывать справа на лево, форму будет выглядеть так:

Но, как мы знаем, от перестановки слагаемых сумма не меняется. Давайте теперь переведем наши числа в десятичную форму.


Рисунок 1.5 – Перевод чисел из двоичной в десятичную систему

1.2.2 Двоичная → Восьмеричная

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

10101001 = 10 101 001

1011100 = 001 011 100

Каждая группа битов – это одно из восьмеричных чисел. Чтобы узнать какое, нужно использовать написанную выше формулу 1.2.1 для каждой группы битов. В результате мы получим.


Рисунок 1.6 – Перевод чисел из двоичной в восьмеричную систему

1.2.3 Двоичная → Шестнадцатеричная

Здесь нам нужно двоичное число разбивать на группы по четыре символа справа налево с последующим дополнением недостающих битов группы ноликами, как писалось выше. Если последняя группа состоит из ноликов, то их нужно игнорировать.

110101011 = 0001 1010 1011

1011100 = 101 1100

001010000 = 000101 0000 = 0101 0000

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


Рисунок 1.7 – Перевод чисел из двоичной в шестнадцатеричную систему

Системы счисления: основные сведения

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

Количество s различных цифр, употребляемых в системе счисления, называется основанием, или базой
системы счисления. В общем случае положительное число X в позиционной системе с основанием s
может быть представлено в виде полинома:

где s — база системы счисления, — цифры,
допустимые в данной системе счисления . Последовательность
образует целую часть X, а последовательность
— дробную часть X.

В вычислительной технике наибольшее применение нашли двоичная (BIN — binary),
и двоично кодированные системы счисления: восьмеричная (OCT — octal), шестнадцатеричная (HEX — hexadecimal) и двоично-кодированная десятичная (BCD — binary coded decimal).

В дальнейшем для обозначения используемой системы счисления число будет заключаться в скобки, а
в индексе указано основание системы. Число X по основанию s будет обозначено
.

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

4.14. Как компьютер выполняет арифметические действия над нормализованными числами?

К началу выполнения арифметического действия операнды операции помещаются
в соответствующие регистры АЛУ.

Сложение и вычитание

При сложении и вычитании сначала производится подготовительная операция,
называемая выравниванием порядков.

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

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

В случае необходимости полученный результат нормализуется путем сдвига
мантиссы результата влево. После каждого сдвига влево порядок результата
уменьшается на единицу.

Пример 1. Сложить двоичные нормализованные числа
0.10111•2–1 и 0.11011*210. Разность порядков слагаемых
здесь равна трем, поэтому перед сложением мантисса первого числа сдвигается на
три разряда вправо:

Пример 2. Выполнить вычитание двоичных нормализованных чисел
0.10101*210 и 0.11101*21. Разность порядков уменьшаемого и
вычитаемого здесь равна единице, поэтому перед вычитанием мантисса второго числа
сдвигается на один разряд вправо:

Результат получился не нормализованным, поэтому его мантисса
сдвигается влево на два разряда
с соответствующим уменьшением порядка на две
единицы: 0.1101*2.

Умножение

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

Пример 3. Выполнить умножение двоичных нормализованных чисел:

(0.11101*2101)*(0.1001*211) = (0.11101*0.1001)*
2(101+11) = 0.100000101*21000.

Деление

При делении двух нормализованных чисел из порядка делимого вычитается
порядок делителя, а мантисса делимого делится на мантиссу делителя. Затем
в случае необходимости полученный результат нормализуется.

Пример 4. Выполнить деление двоичных нормализованных чисел:

0.1111*2100 : 0.101*211 = (0.1111 : 0.101) *
2(100–11) = 1.1*21 = 0.11•210.

Использование представления чисел с плавающей точкой существенно усложняет
схему арифметико-логического устройства.

Небольшой тест

Вопрос 1

Преобразуйте 0100 1101 в десятичную форму.

Ответ

Двоичное число 1 1 1 1
* Значение цифры 128 64 32 16 8 4 2 1
= Результат (77) 64 8 4 1

Ответ 77.

Вопрос 2

Преобразуйте 93 в 8-битное двоичное число без знака. Используйте оба метода, описанные выше.

Ответ

Используя метод 1:

Работая с остатками в обратном направлении, получаем 101 1101

Используя метод 2:

  • Наибольшее значение двойки, возведенной в степень, которое меньше 93, равно 64.
  • 93 >= 64? Да, поэтому бит со значением 64 равен 1. 93 — 64 = 29.
  • 29 >= 32? Нет, поэтому бит со значением 32 равен 0.
  • 29 >= 16? Да, поэтому бит со значением 16 равен 1. 29 — 16 = 13.
  • 13 >= 8? Да, поэтому бит со значением 8 равен 1. 13 — 8 = 5.
  • 5 >= 4? Да, поэтому бит со значением 4 равен 1. 5 — 4 = 1.
  • 1 >= 2? Нет, поэтому бит со значением 2 равен 0.
  • 1 >= 1? Да, поэтому бит со значением 1 равен 1.

Ответ: 0101 1101.

Вопрос 3

Преобразуйте -93 в 8-битное двоичное число со знаком (с использованием дополнительного кода).

Ответ

  • Из предыдущего ответа мы уже знаем, что 93 – это 0101 1101
  • Для дополнительного кода инвертируем биты: 1010 0010
  • И прибавляем 1: 1010 0011

Вопрос 4

Преобразуйте 1010 0010 в десятичное число без знака.

Ответ

Работаем справа налево:

1010 0010 = (0 * 1) + (1 * 2) + (0 * 4) + (0 * 8) + (0 * 16) + (1 * 32) + (0 * 64) + (1 * 128) = 2 + 32 + 128 = 162

Ответ: 162.

Вопрос 5

Преобразуйте 1010 0010 в десятичное число со знаком (исходное число представлено в дополнительном коде).

Ответ

Поскольку нам сказано, что это число представлено в дополнительном коде, мы можем «отменить» дополнительный код, инвертировав биты и добавив 1.

  • Сначала начнем с нашего двоичного числа: 1010 0010
  • Инвертируем биты: 0101 1101
  • Добавляем 1: 0101 1110
  • Преобразуем в десятичную форму: 64 + 16 + 8 + 4 + 2 = 94
  • Помним, что это дополнительный код, а исходный левый бит был отрицательным: -94

Ответ: -94

Вопрос 6

Напишите программу, которая просит пользователя ввести число от 0 до 255. Напечатайте это число как 8-битное двоичное число (в форме #### ####). Не используйте побитовые операторы. Не используйте .

Подсказка 1

Используйте метод 2. Предположим, что наибольшее значение двойки, возведенной в степень, равно 128.

Подсказка 2

Напишите функцию, чтобы проверить, больше ли введенное вами число, чем значение двойки, возведенной в некоторую степень. Если да, выведите ‘1’ и верните свое число за вычетом значения двойки, возведенной в степень.

Ответ

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

Пример 3: перевести 231.20 из четверичной в семеричную систему счисления.

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

1. Для перевода числа 231.20 в десятичную систему воспользуемся формулой:

An = an-1 ∙ qn-1 + an-2 ∙ qn-2 + ∙∙∙ + a ∙ q + a-1 ∙ q-1 + ∙∙∙ + a-m ∙ q-m

Отсюда:

231.204=2 ∙ 42 + 3 ∙ 41 + 1 ∙ 4 + 2 ∙ 4-1 + 0 ∙ 4-2 = 2 ∙ 16 + 3 ∙ 4 + 1 ∙ 1 + 2 ∙ 0.25 + 0 ∙ 0.0625 = 32 + 12 + 1 + 0.5 + 0 = 45.510

Таким образом:

231.204 = 45.510

2. Полученное число 45.5 переведем из десятичной системы счисления в семеричную. Т.к. полученное число содержит дробную часть, нам потребуется перевести вначале целую часть, а затем дробную. Таким образом необходимо:

  1. Перевести 45 в семеричную систему;
  2. Перевести 0.5 в семеричную систему;

2.1 Для того, чтобы перевести число 45 из десятичной системы счисления в 7-ую, необходимо осуществить последовательное деление на 7, до тех пор пока остаток не будет меньше чем 7.

Полученные остатки записываем в обратном порядке, таким образом:

4510=637

2.2 Для перевода десятичной дроби 0.5 в 7-ую систему, необходимо выполнить последовательное умножение дроби на 7, до тех пор, пока дробная часть не станет равной 0 или пока не будет достигнута заданная точность вычисления. Получаем:

0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3) 0.5 ∙ 7 = 3.5 (3)

Ответом станет прямая последовательность целых частей произведения. Т.е.

0.510=0.333333333337

2.3. Осталось соединить переведенные части, таким образом:

45.510=63.333333333337

Ответ: 231.204 = 63.333333333337.

Метод 1 для преобразования числа из десятичной системы счисления в двоичную

Преобразование десятичного числа в двоичную форму немного сложнее, но всё же довольно простое. Для этого есть два хороших метода.

Первый метод заключается в постоянном делении на 2 и записи остатков. Двоичное число строится в конце из остатков снизу вверх.

Преобразование 148 из десятичной формы в двоичную (для обозначения остатка используется r, от «remainder»):

Записываем все остатки снизу вверх: 1001 0100

148 в десятичном формате = 1001 0100 в двоичном формате.

Вы можете проверить это, преобразовав двоичное число обратно в десятичное:

(1 * 128) + (0 * 64) + (0 * 32) + (1 * 16) + (0 * 8) + (1 * 4) + (0 * 2) + (0 * 1) = 148

4.4. Почему люди пользуются десятичной системой, а компьютеры — двоичной?

Люди предпочитают десятичную систему, вероятно, потому, что с древних времен
считали по пальцам, а пальцев у людей по десять на руках и ногах. Не всегда и не
везде люди пользуются десятичной системой счисления. В Китае, например, долгое
время пользовались пятеричной системой счисления.

А компьютеры используют двоичную систему потому, что она имеет ряд
преимуществ перед другими системами:

  • для ее реализации нужны технические устройства с двумя устойчивыми
    состояниями
    (есть ток — нет тока, намагничен — не намагничен и т.п.), а
    не, например, с десятью, — как в десятичной;
  • представление информации посредством только двух состояний надежно
    и помехоустойчиво;
  • возможно применение аппарата булевой алгебры для выполнения
    логических преобразований информации;
  • двоичная арифметика намного проще десятичной.

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