Краткое пособие по переводу между системами счисления с основаниями 2, 8, 10, 16

от автора

Термины

  • NS (СС) — Numeral System (Система Счисления)

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

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

Алгоритм №1

Мы можем перевести число n_{10} из десятичной NS в двоичную, следуя следующему алгоритму:
Для этого необходимо выполнить следующие действия:

  1. Делим n_{10} на 2 и записываем остаток от деления

  2. Результат деления вновь делим на 2 и опять записываем остаток

  3. Повторяем операцию до тех пор пока результат деления не будет равен нулю

  4. Записываем полученные остатки в обратном порядке. Полученное число и будет искомым n_{2}

Пример:
Дано число n_{10}=377_{10};\; n_{2}=?
377 \div 2 = 188\: (ост. 1)
188 \div 2 = 94\: (ост. 0)
94 \div 2 = 47\: (ост. 0)
47 \div 2 = 23\: (ост. 1)
23 \div 2 = 11\: (ост. 1)
11 \div 2 = 5\: (ост. 1)
5 \div 2 = 2\: (ост. 1)
2 \div 2 = 1\: (ост. 0)
1 \div 2 = 0\: (ост. 1)

Ответ: n_{2}=101111001_{2}

Алгоритм №2

Есть и другой способ перевода числа n_{10} из десятичной NS в двоичную: путем «прикидок» степеней двоек, не превышающих данного числа.

Пример:
Дано число n_{10}=575_{10};\;n_2=?

  1. Шаг первый. Прикинем степень двойки, не превышающую данного числа.

    512<575<1024\; \rightarrow\; 2^9<575<2^{10}

  2. Шаг второй. Так как число 575 больше 2^9, значит мы можем представить число 575 в виде суммы 2^9+63.

  3. Повторим первый шаг: прикинем степень двойки, не превышающую второго слагаемого.

    32<63<64\;\rightarrow\;2^5<63<2^6

  4. Повторим второй шаг: так как число 63 больше 2^5, значит мы можем представить число 63 в виде суммы 2^5+31.

  5. Далее повторим вторые и третьи шаги до тех пор, пока мы не разложим число 575 на сумму степеней двоек. В итоге мы получим следующую запись:

    575=2^9+2^5+2^4+2^3+2^2+2^1+2^0

  6. Шаг третий. Расставим единицы в тех разрядах, номера которых равны степеням двоек в полученной ранее сумме (разряды пронумерованы с 0).

    n_2=\overset{9}{1}\,\overset{8}{0}\,\overset{7}{0}\,\overset{6}{0}\,\overset{5}{1}\,\overset{4}{1}\,\overset{3}{1}\,\overset{2}{1}\,\overset{1}{1}\,\overset{0}{1}\,_{2}

Ответ: n_{2}=1000111111_{2}

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

Перевод числа из двоичной NS в десятичную осуществляется путем умножения каждого разряда числа на 2^k, где k — номер разряда, начиная с 0.

Пример:
Дано число n_2=10101000101111_2;\; n_{10}=?

  1. Шаг первый. Пронумеруем разряды данного нам двоичного числа от 0 справа налево:

n_2=\overset{13}{1}\,\overset{12}{0}\,\overset{11}{1}\,\overset{10}{0}\,\overset{9}{1}\,\overset{8}{0}\,\overset{7}{0}\,\overset{6}{0}\,\overset{5}{1}\,\overset{4}{0}\,\overset{3}{1}\,\overset{2}{1}\,\overset{1}{1}\,\overset{0}{1}\,_2

  1. Шаг второй. Запишем сумму вида 2^k, где k — номер разряда, начиная с 0:

n_{10}=2^{13}+2^{11}+2^9+2^5+2^3+2^2+2^1+2^0=10799_{10}

Ответ: n_{10}=10799_{10}

Перевод из двоичной NS в восьмеричную

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

Пример:
Дано число n_2=10011_2;\; n_{8}=?

n_2=\,'010'011_2

По таблице увидим, что двоичному числу 010_2=10_2 соответствует восьмеричное число 2_8, а числу 011_2=11_23_8, значит, заменив каждую триаду на соответствующее восьмеричное число, получим:

n_8=23_8

Ответ: n_8=23_8

Перевод из восьмеричной NS в двоичную

Заменим каждую цифру числа n_{8} соответствующей триадой из таблицы перевода (см приложение).

Пример:
Дано число n_{8}=735_{8};\; n_{2}=?

\left.\begin{align} &n_{8}=735_{8} \\ &7_{8}\rightarrow111_{2} \\ &3_{8}\rightarrow011_{2} \\ &5_{8}\rightarrow101_{2} \\\end{align}\right\}\;\Rightarrow \; n_{2}=111011101_{2}

Ответ: n_{2}=111011101_{2}

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

Алгоритм перевода в восьмеричную NS тот же, что и алгоритм №1 перевода в двоичную NS.
Необходимо выполнить следующие действия:

  1. Делим n_{10} на 8 и записываем остаток от деления

  2. Результат деления вновь делим на 8 и опять записываем остаток

  3. Повторяем операцию до тех пор пока результат деления не будет равен нулю

  4. Записываем полученные остатки в обратном порядке. Полученное число и будет искомым n_{8}

Пример:
Дано число n_{10}=1089_{10};\; n_{8}=?
1089 \div 8 = 136\: (ост. 1)
136 \div 8 = 17\: (ост. 0)
17 \div 8 = 2\: (ост. 1)
2 \div 8 = 0\: (ост. 2)

Ответ: n_{8}=2101_{8}

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

Для перевода из восьмеричной NS в десятичную, необходимо умножить каждый разряд числа n_{8} на 8^k, где k — номер разряда, начиная с 0, а затем сложить полученные значения.

Пример:
Дано число n_{8}=4766_{8};\; n_{10}=?

n_{8}=\overset{3}{4}\,\overset{2}{7}\,\overset{1}{6}\,\overset{0}{6}\,_{8}\Rightarrow n_{10}=4\cdot8^3+7\cdot8^2+6\cdot8^1+6\cdot8^0=2550_{10}

Ответ: n_{10}=2550_{10}

Перевод из десятичной NS в шестнадцатеричную

Алгоритм перевода в восьмеричную NS практически тот же, что и алгоритм №1 перевода в двоичную NS.
Необходимо выполнить следующие действия:

  1. Делим n_{10} на 16 и записываем остаток от деления

  2. Результат деления вновь делим на 16 и опять записываем остаток

  3. Повторяем операцию до тех пор пока результат деления не будет равен нулю

  4. Переводим остатки бо́льшие 9 согласно таблице перевода (см приложение)

  5. Записываем полученные остатки в обратном порядке. Полученное число и будет искомым n_{16}

Пример:
Дано число n_{10}=10492_{10};\; n_{16}=?
10492\div16=655\: (ост. 12 \rightarrow C)
655\div16=40\: (ост. 15 \rightarrow F)
40\div16=2\: (ост. 8)
2\div16=0\: (ост. 2)

Ответ: n_{16}=28FC_{16}

Перевод из шестнадцатеричной NS в десятичную

Для перевода из восьмеричной NS в десятичную, необходимо перевести A\ldots F в соответствующие числа 10\ldots 15 по таблице перевода (см приложение) и умножить каждый разряд числа n_{16} на 16^k, где k — номер разряда, начиная с 0, а затем сложить полученные значения.

Пример:
Дано число n_{16}=FD1_{16};\;n_{10}=?

\left.\begin{align} &n_{16}=\overset{2}{F}\,\overset{1}{D}\,\overset{0}{1}\,_{16} \\ &F_{16}\rightarrow15_{10} \\ &D_{16}\rightarrow13_{10} \\ \end{align} \right\} \ \Rightarrow \; n_{10}=15\cdot16^2+13\cdot 16^1+1\cdot 16^0=4049_{10}

Ответ: n_{10}=4049_{10}


Приложение

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

\LARGE N_{10}=\sum\limits_{i=0}^ka_i\cdot b^i

, где:

  • N_{10} — число в десятичной NS

  • a_i — цифра числа в исходной NS, начиная с младшего разряда (справа налево)

  • b — основание исходной NS

  • k — номер старшего разряда (индекс последней цифры = количество цифр в исходном числе -1)

Таблица перевода между NS

N_{10}

N_{2}

N_{8}

N_{16}

0

0

0

0

1

1

1

1

2

10

2

2

3

11

3

3

4

100

4

4

5

101

5

5

6

110

6

6

7

111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

A

11

1011

13

B

12

1100

14

C

13

1101

15

D

14

1110

16

E

15

1111

17

F


ссылка на оригинал статьи https://habr.com/ru/articles/852722/


Комментарии

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

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