Системы счисления, руководство по основам и преобразованию
Введение
Мы начнём наше обсуждение различных систем счисления с краткого описания параметров, общих для всех систем. Понимание этих параметров и их значимости для систем счисления является фундаментальным для понимания того, как эти системы функционируют. Различные характеристики, определяющие систему счисления, включают количество независимых цифр, используемых в системе, значения разрядов различных цифр, составляющих число, и максимальные числа, которые можно записать с заданным количеством цифр.
Среди трёх характерных параметров самым фундаментальным является количество независимых цифр или символов, используемых в системе счисления. Это известно как основание или база системы счисления. Десятичная система счисления, с которой мы все так хорошо знакомы, имеет основание 10, так как в ней используются 10 независимых цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9. Аналогично, двоичная система счисления с только двумя независимыми цифрами, 0 и 1, является системой счисления с основанием 2. Восьмеричная и шестнадцатеричная системы счисления имеют основания 8 и 16 соответственно.
Мы увидим в следующих разделах, что основание системы счисления также определяет другие две характеристики. Значения разрядов различных цифр в целой части числа задаются как ( r0, r1, r2, r3 ) и так далее, начиная с цифры, непосредственно прилегающей к точке основания. Для дробной части они равны ( r-1, r-2, r-3 ) и так далее, также начиная с цифры, следующей за точкой основания. Здесь ( r ) — основание системы счисления. Также максимальные числа, которые можно записать с ( n ) цифрами в данной системе счисления, равны ( rn ).
Аналоговые и цифровые системы
Существует два основных подхода к отображению численных значений различных физических величин, с которыми мы сталкиваемся повседневно. Первый подход, известный как аналоговый, предполагает представление численного значения в виде непрерывного диапазона между двумя предельными значениями. Так, температура печи, регулируемой в пределах от 0 до 100 °C, может фиксироваться на уровне 65 °C, 64,96 °C, 64,958 °C или даже 64,9579 °C в зависимости от точности прибора. Аналогично, напряжение в электронной цепи может измеряться как 6,5 В, 6,49 В, 6,487 В и 6,4869 В. Суть аналогового способа заключается в том, что изменение значений происходит непрерывно, позволяя любому числу в заданном диапазоне.
Второй метод, называемый цифровым, представляет численные значения в виде дискретных шагов. Часто это представление осуществляется с использованием двоичной системы. Например, температура печи может быть представлена с шагом в 1 °C: 64 °C, 65 °C, 66 °C и т.д.
Таким образом, аналоговые системы дают непрерывный выход, в то время как цифровые системы формируют дискретный. В аналоговых системах устройства работают с физическими величинами, представленными в аналоговой форме, тогда как цифровые системы используют числовые значения, обработанные в цифровом виде.
Цифровые технологии имеют ряд преимуществ: простота проектирования, повышенная точность, программируемость, устойчивость к помехам, упрощённое хранение данных и возможность интеграции в компактные схемы для создания более сложных функций. Однако физический мир в своей природе аналогов: многие параметры, такие как положение, скорость, ускорение, сила, давление, температура и расход, имеют аналоговую природу. Поэтому для использования цифровых технологий аналоговые переменные необходимо дискретизировать. В большинстве систем с аналоговыми входами и выходами аналоговые сигналы преобразуются в цифровой вид с помощью аналого-цифрового преобразователя на входе и вновь преобразуются в аналоговую форму с использованием цифро-аналогового преобразователя на выходе.
Десятичная система счисления
Десятичная система счисления — это система с основанием 10, поэтому она имеет 10 различных цифр или символов: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9. Все числа, превышающие «9», представлены только этими 10 цифрами. Процесс записи чисел высшего порядка после «9» состоит в том, чтобы сначала написать вторую цифру (т.е. «1»), а затем последовательно добавлять остальные цифры по одной, чтобы получить следующие 10 чисел от «10» до «19». Следующие 10 чисел от «20» до «29» получают, записывая сначала третью цифру (т.е. «2»), а затем последовательно цифры от «0» до «9». Этот процесс продолжается, пока не будут исчерпаны все возможные двухзначные комбинации и не достигнуто число «99». Затем начинают использовать трехзначные комбинации. Первое трехзначное число состоит из наименьшего двухзначного числа, за которым следует «0» (т.е. 100), и этот процесс продолжается бесконечно.
Разрядные значения разных цифр в смешанном десятичном числе, начиная от десятичной точки, равны 100,101,102 и так далее (для целой части) и 10−1,10−2,10−3 и так далее (для дробной части).
Значение или величина данного десятичного числа может быть выражена как сумма различных цифр, умноженных на их разрядные значения или веса.
Например, в случае десятичного числа 3586.265 целая часть (т.е. 3586) может быть выражена как:
3586 = 6 \times 10^0 + 8 \times 10^1 + 5 \times 10^2 + 3 \times 10^3 \\= 6 + 80 + 500 + 3000 = 3586
а дробная часть может быть выражена как:
0.265 = 2 \times 10^{-1} + 6 \times 10^{-2} + 5 \times 10^{-3} \\= 0.2 + 0.06 + 0.005
Дополнения
В десятичной системе счисления, аналогично дополнениям до 1 и до 2 в двоичной системе, существуют дополнения до 9 и до 10. Дополнение до 9 заданного десятичного числа получается вычитанием каждой его цифры из 9. Например, дополнение до 9 числа (2496)10 равно (7503)10. Дополнение до 10 получается добавлением «1» к дополнению до 9. Таким образом, дополнение до 10 числа (2496)10 равно (7504)10.
Двоичная система счисления
Двоичная система счисления — это система с основанием 2, где «0» и «1» являются двумя независимыми цифрами. Все большие двоичные числа представлены с помощью «0» и «1». Процедура записи двоичных чисел высшего порядка после «1» аналогична той, что была объяснена в случае десятичной системы счисления. Например, первые 16 чисел в двоичной системе счисления будут: 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110 и 1111. Следующее число после 1111 — это 10000, которое является наименьшим двоичным числом с пятью цифрами. Это также подтверждает ранее высказанную мысль о том, что максимум только 16 (т.е. 24) чисел можно записать с помощью четырех цифр. Начиная от двоичной точки, разрядные значения различных цифр в смешанном двоичном числе равны 20,21,22 и так далее (для целой части) и 2−1,2−2,2−3 и так далее (для дробной части).
Дополнения
Бит — это сокращение от английского «binary digit» (двоичная цифра) и является наименьшей единицей информации, принимающей значение либо «0», либо «1». Байт представляет собой последовательность из восьми битов и является базовой единицей данных, с которой работают компьютеры как с единым целым. Слово компьютера — это также последовательность битов, размер которой называется «длиной слова» и фиксирован для конкретного компьютера, хотя может различаться между разными системами. Длина слова может составлять один байт, два байта, четыре байта или быть еще больше.
Дополнение до 1 двоичного числа получается инвертированием всех его битов, то есть заменой 0 на 1 и 1 на 0. Например, дополнение до 1 числа (10010110)2 равно (01101001)2. Дополнение до 2 двоичного числа получается добавлением «1» к его дополнению до 1. Таким образом, дополнение до 2 числа (10010110)2 равно (01101010)2.
Преимущества двоичной системы
Логические операции лежат в основе функционирования любого цифрового компьютера, хотя для выполнения задач также требуются арифметические операции. Когда Джордж Буль разработал математическую логику, он создал основу современного цифрового компьютера, сведя логику к бинарной системе с использованием «0» и «1». Поскольку логическая математика была уже глубоко изучена и показала свою эффективность в решении различных задач, а также благодаря её адаптации к бинарной системе (известной как булева алгебра), двоичная система счисления оказалась более удобной и мощной для компьютерных технологий по сравнению с другими.
Еще одним важным преимуществом этой системы стало то, что любой тип данных можно было легко представить как последовательность из 0 и 1. Более того, элементарные электронные устройства, используемые в аппаратной части, могли эффективно функционировать в двух отчетливо различимых состояниях. Например, биполярный транзистор мог стабильно работать либо в режиме отсечки, либо в режиме насыщения. Вдобавок, схемы, предназначенные для выполнения арифметических операций, таких как сложение, вычитание, умножение и деление, значительно упрощаются, когда данные представлены в двоичном формате.
Восьмеричная система счисления
Восьмеричная система счисления основана на числе 8, поэтому в ней используются восемь различных цифр: 0, 1, 2, 3, 4, 5, 6 и 7. Все более высокие числа выражаются комбинациями этих цифр по той же схеме, что и в двоичной или десятичной системах. Например, следующие 10 чисел после «7» будут: 10, 11, 12, 13, 14, 15, 16, 17, 20 и 21. По сути, если мы исключим из десятичной системы все числа, содержащие цифры 8 или 9, то получим восьмеричную систему счисления. Разрядные значения для цифр в восьмеричной системе таковы: 80, 81, 82 и так далее для целой части, и 8−1, 8−2, 8−3 и так далее для дробной части.
Дополнения
В восьмеричной системе счисления используются дополнения до 7 и до 8. Дополнение до 7 заданного восьмеричного числа получается вычитанием каждой его цифры из 7. Например, дополнение до 7 числа (562)8 равно (215)8. Дополнение до 8 получается добавлением «1» к дополнению до 7. Таким образом, дополнение до 8 числа (562)8 равно (216)8.
Шестнадцатеричная система счисления
Шестнадцатеричная система счисления имеет основание 16 и использует 16 основных символов: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E и F. Разрядные значения цифр в таком числе определяются степенями 16: 160, 161, 162 и так далее для целой части, и 16−1, 16−2, 16−3 и так далее для дробной части. Символы A, B, C, D, E и F соответствуют десятичным числам 10, 11, 12, 13, 14 и 15 соответственно.
Шестнадцатеричная система предоставляет удобный и компактный способ представления больших двоичных чисел, которые хранятся и обрабатываются внутри компьютера. Например, при обозначении адресов памяти. Допустим, у нас есть компьютер с 64К памяти. Это означает 65 536 (216) ячеек памяти, и для каждой требуется уникальный адрес. В десятичной системе эти адреса обозначались бы от 0 до 65 535, а в двоичной — от 00000000 00000000 до 11111111 11111111, что довольно громоздко и неудобно. Шестнадцатеричная система позволяет выразить все 65 536 адресов с помощью всего четырех символов — от 0000 до FFFF. Также содержимое памяти, представленное в шестнадцатеричном формате, значительно упрощает работу с данными.
Дополнения
В шестнадцатеричной системе используются дополнения до 15 и до 16. Дополнение до 15 получается путем вычитания каждой цифры числа из 15. Например, дополнение до 15 для числа (3BF)16 будет (C40)16. Дополнение до 16 определяется добавлением «1» к дополнению до 15. Таким образом, дополнение до 16 числа (2AE)16 равно (D52)16.
Нахождение десятичного эквивалента
Десятичный эквивалент числа в другой системе счисления определяется как сумма всех его цифр, умноженных на их соответствующие разрядные значения. При этом целую и дробную части числа следует рассматривать отдельно. Ниже приведены примеры преобразования из двоичной, восьмеричной и шестнадцатеричной систем счисления в десятичную.
Преобразование двоичного числа в десятичное
Чтобы преобразовать двоичное число (1001.0101)2 в десятичное, выполните следующие шаги:
- Целая часть: 1001
Вычисляем ее значение:
1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 \\= 8 + 0 + 0 + 1 = 9
- Дробная часть: .0101
Вычисляем ее значение:
0 \times 2^{-1} + 1 \times 2^{-2} + 0 \times 2^{-3} + 1 \times 2^{-4} \\ = 0 + 0.25 + 0 + 0.0625 \\ = 0.3125
- Общий результат:
Складываем целую и дробную части:
9 + 0.3125 = 9.3125
Таким образом, двоичное число (1001.0101)2 в десятичной системе равно 9.3125.
Преобразование восьмеричного числа в десятичное
Чтобы преобразовать восьмеричное число (137.21)8 в десятичное, следуйте следующим шагам:
- Целая часть: 137
Вычислим десятичное значение:
\begin{align*} &1 \times 8^2 + 3 \times 8^1 + 7 \times 8^0 \\ &= 1 \times 64 + 3 \times 8 + 7 \times 1 \\ &= 64 + 24 + 7 = 95 \end{align*}
- Дробная часть: .21
Вычислим десятичное значение:
\begin{align*} &2 \times 8^{-1} + 1 \times 8^{-2} \\ &= 2 \times 0.125 + 1 \times 0.015625 \\ &= 0.25 + 0.015625 = 0.265625 \end{align*}
- Общий результат:
Суммируем целую и дробную части:
95 + 0.265625 = 95.265625
Ответ: Восьмеричное число (137.21)8 в десятичной системе равно 95.265625.
Преобразование шестнадцатеричного числа в десятичное
Давайте преобразуем шестнадцатеричное число (1E0.2A)16 в десятичное.
- Целая часть: 1E0
Преобразуем каждую цифру в десятичный эквивалент (помним, что E=14).
Вычисляем значение:
\begin{align*} &1 \times 16^2 + E \times 16^1 + 0 \times 16^0 \\ &= 1 \times 256 + 14 \times 16 + 0 \times 1 \\ &= 256 + 224 + 0 = 480 \end{align*}
- Дробная часть: .2A
Преобразуем дробные цифры (A=10).
Вычисляем значение:
\begin{align*} &2 \times 16^{-1} + A \times 16^{-2} \\ &= 2 \times \frac{1}{16} + 10 \times \frac{1}{256} \\ &= 0.125 + 0.0390625 = 0.1640625 \end{align*}
- Общий результат:
Складываем целую и дробную части:
480 + 0.1640625 = 480.1640625
Ответ: Шестнадцатеричное число (1E0.2A)16 в десятичной системе равно 480.1640625.
Преобразование десятичной системы в двоичную
При преобразовании десятичного числа в двоичное целую и дробную части обрабатывают отдельно. Для целой части двоичный эквивалент находится путем последовательного деления числа на 2 и записи остатков. Этот процесс продолжается до тех пор, пока частное не станет равным нулю. Записанные в обратном порядке остатки образуют двоичное представление целой части.
Для дробной части двоичный эквивалент получается путем последовательного умножения дробной части на 2 и фиксации целой части результата на каждом шаге. Этот процесс продолжается до тех пор, пока результат умножения не станет равен нулю или пока не будет достигнута необходимая точность. Полученные целые части, записанные в порядке их появления, составляют двоичное представление дробной части десятичного числа.
Если при умножении дробной части на 2 результат не стремится к нулю, процесс можно остановить после получения требуемого количества двоичных знаков. Такой метод преобразования из десятичной в двоичную систему широко известен как метод «double-dabble». Лучше всего понять этот процесс поможет наглядный пример.
Пример преобразования десятичной системы в двоичную
Мы найдем двоичный эквивалент числа (13.375)10.
Решение
- Преобразование целой части: 13
Последовательно делим число на 2 и записываем остатки:
\begin{array}{ccc} \text{Делитель} & \text{Частное} & \text{Остаток} \\ 2 & 13 & 1 \\ 2 & 6 & 0 \\ 2 & 3 & 1 \\ 2 & 1 & 1 \\ & 0 & 1 \\ \end{array}
Читаем остатки снизу вверх и получаем двоичное представление целой части:
13_{10} = 1101_2
- Преобразование дробной части: 0.375
Последовательно умножаем дробную часть на 2 и фиксируем целую часть результата на каждом шаге:
\begin{align*} 0.375 \times 2 &= 0.75 \quad \text{целая часть } 0 \\ 0.75 \times 2 &= 1.5 \quad \text{целая часть } 1 \\ 0.5 \times 2 &= 1.0 \quad \text{целая часть } 1 \\ \end{align*}
Собираем целые части в порядке их получения для двоичного представления дробной части:
0.375_{10} = 0.011_2
- Объединение целой и дробной частей
Соединяем результаты преобразования целой и дробной частей:
13.375_{10} = 1101.011_2
Ответ: Десятичное число (13.375)10 в двоичной системе счисления равно (1101.011)2.
Преобразование десятичной системы в восьмеричную
Преобразование десятичного числа в восьмеричную систему во многом похоже на процесс перевода в двоичную систему. Для целой части числа мы последовательно делим на 8 — основание восьмеричной системы — записывая остатки. Для дробной части последовательно умножаем на 8, фиксируя целые части результатов. Как и раньше, целая и дробная части обрабатываются отдельно. Наиболее понятно этот процесс можно продемонстрировать с помощью примера.
Пример преобразования десятичной системы в восьмеричную
Мы собираемся найти восьмеричный эквивалент числа (73.75)10.
Решение
- Преобразование целой части: 73
Последовательно делим число на 8 и записываем остатки:
\begin{array}{ccc} \text{Делитель} & \text{Частное} & \text{Остаток} \\ 8 & 73 & 1 \\ 8 & 9 & 1 \\ 8 & 1 & 1 \\ & 0 & 1 \\ \end{array}
Читаем остатки снизу вверх, чтобы получить восьмеричное представление целой части:
73_{10} = 111_8
- Преобразование дробной части: 0.75
Последовательно умножаем дробную часть на 8 и фиксируем целые части результатов:
\begin{align*} 0.75 \times 8 &= 6.0 \quad \text{целая часть } 6 \\ 0.0 \times 8 &= 0.0 \quad \text{целая часть } 0 \\ \end{align*}
Поскольку после первого шага дробная часть стала равной нулю, можем остановиться. Собираем целые части в порядке их появления:
0.75_{10} = 0.6_8
- Объединение результатов
Соединяем полученные восьмеричные эквиваленты целой и дробной частей:
73.75_{10} = 111.6_8
Ответ: Десятичное число (73.75)10 в восьмеричной системе счисления записывается как (111.6)8.
Преобразование десятичных чисел в шестнадцатеричные
Преобразование десятичного числа в шестнадцатеричную систему счисления выполняется аналогично предыдущим методам. Поскольку основание шестнадцатеричной системы равно 16, мы используем число 16 при последовательном делении целой части и умножении дробной части. Проще всего понять этот процесс, рассмотрев конкретный пример.
Пример преобразования десятичных чисел в шестнадцатеричные
Давайте найдем шестнадцатеричный эквивалент числа (82.25)10.
Решение
- Целая часть: 82
Последовательно делим целую часть на 16 и записываем остатки:
\begin{array}{ccc} \text{Делитель} & \text{Частное} & \text{Остаток} \\ 16 & 82 & 2 \\ 16 & 5 & 5 \\ & 0 & \\ \end{array}
Остатки, прочитанные снизу вверх, дают шестнадцатеричное представление целой части:
82_{10} = 52_{16}
Примечание: Остатки 5 и 2 образуют число 5*161+2*160=80+2=82
- Дробная часть: 0.25
Последовательно умножаем дробную часть на 16 и фиксируем целые части результатов:
0.25 \times 16 = 4.0 \quad \text{целая часть } 4
После умножения дробная часть стала равной нулю, поэтому процесс можно остановить. Целая часть результата дает нам шестнадцатеричное представление дробной части:
0.25_{10} = 0.4_{16}
- Объединение результатов
Соединяем целую и дробную части для получения полного шестнадцатеричного эквивалента:
82.25_{10} = 52.4_{16}
Ответ: Десятичное число (82.25)10 в шестнадцатеричной системе счисления равно (52.4)16.
Преобразование между восьмеричной и двоичной системами счисления
Восьмеричное число можно преобразовать в двоичный эквивалент, заменив каждую его цифру на соответствующую трехбитную двоичную комбинацию. Мы используем три бита, потому что основание восьмеричной системы 8 это третья степень основания двоичной системы: 23=8. Поэтому достаточно запомнить двоичные эквиваленты цифр от 0 до 7 в трехбитном формате.
Чтобы преобразовать двоичное число в восьмеричное, необходимо разделить его целую и дробную части на группы по три бита, начиная от двоичной точки влево и вправо соответственно. Если в крайних группах не хватает битов, можно добавить нули слева или справа для их заполнения.
Пример преобразования между восьмеричной и двоичной системами счисления
Найти двоичный эквивалент восьмеричного числа (374.26)8 и восьмеричный эквивалент двоичного числа (1110100.0100111)2.
Решение:
- Разбиваем каждую восьмеричную цифру на трехбитные двоичные эквиваленты:
Преобразование (374.26)8 в двоичную систему:
3_8=011_2\\7_8=111_2\\4_8=100_2\\2_8=010_2\\6_8=110_2
Соединяем полученные двоичные группы:
(374.26)_8 = (011\ 111\ 100.010\ 110)_2
Объединяем группы в двоичное число:
(374.26)_8 = (011111100.010110)_2
Удаляем незначащие нули слева от целой части и справа от дробной части:
(011111100.010110)_2 = (11111100.01011)_2
Ответ: Двоичный эквивалент числа (374.26)8 равен (11111100.01011)2.
- Преобразование (1110100.0100111)2 в восьмеричную систему:
- Разбиваем двоичное число на группы по три бита.
- Целая часть (слева направо от двоичной точки).
Добавляем ведущий ноль для полной группы:
0\ 111\ 010\ 0
- Дробная часть (справа налево от двоичной точки).
Добавляем ноль в конце для полной группы:
0\ 100\ 111\ 0
Группируем биты:
\begin{align*} &0\ 111\ 010\ 0.\ 010\ 011\ 1 \\ &\text{После добавления нулей:} \\ &001\ 110\ 100.\ 010\ 011\ 100 \\ \end{align*}
Преобразуем каждую группу в восьмеричную цифру:
001_2 = 1_8 \\ 110_2 = 6_8 \\ 100_2 = 4_8 \\ 010_2 = 2_8 \\ 011_2 = 3_8 \\ 100_2 = 4_8
Соединяем восьмеричные цифры:
(1110100.0100111)_2 = (164.234)_8
Ответ: Восьмеричный эквивалент числа (1110100.0100111)2 равен (164.234)8.
Преобразование между шестнадцатеричной и двоичной системами
Шестнадцатеричное число можно преобразовать в двоичный эквивалент, заменяя каждую его цифру на соответствующую четырехбитную двоичную комбинацию. Мы используем четыре бита, потому что основание шестнадцатеричной системы — 16, что является четвертой степенью основания двоичной системы: 24=16. Поэтому достаточно запомнить четырехбитные двоичные эквиваленты основных цифр шестнадцатеричной системы.
Чтобы преобразовать двоичное число в шестнадцатеричное, разделите его целую и дробную части на группы по четыре бита, начиная от двоичной точки влево и вправо соответственно. Если в крайних группах не хватает битов, можно добавить нули слева или справа для их заполнения.
Пример преобразования между шестнадцатеричной и двоичной системами
Найти двоичный эквивалент шестнадцатеричного числа (17E.F6)16 и шестнадцатеричный эквивалент двоичного числа (1011001110.01101101)2.
Решение:
- Преобразование (17E.F6)16 в двоичное число:
Разбиваем каждую шестнадцатеричную цифру на четырехбитные двоичные эквиваленты:
1_{16} = 0001_2 \\ 7_{16} = 0111_2 \\ E_{16} = 1110_2 \\ F_{16} = 1111_2 \\ 6_{16} = 0110_2
Соединяем двоичные группы:
(17E.F6)_{16} = (0001\ 0111\ 1110.1111\ 0110)_2
Убираем незначащие нули слева от целой части:
(0001\ 0111\ 1110.1111\ 0110)_2 = (101111110.11110110)_2
Ответ: Двоичный эквивалент числа (17E.F6)16 равен (101111110.11110110)2.
- Преобразование (1011001110.01101101)2 в шестнадцатеричное число:
- Целая часть.
- Добавляем нули слева, чтобы получить полные группы.
Разбиваем двоичное число на группы по четыре бита:
0010\ 1100\ 1110
Дробная часть. Добавляем нули справа, чтобы получить полные группы:
0110\ 1101\ 0000
Преобразуем каждую группу в шестнадцатеричные цифры:
0010_2 = 2_{16} \\ 1100_2 = C_{16} \\ 1110_2 = E_{16} \\ 0110_2 = 6_{16} \\ 1101_2 = D_{16} \\ 0000_2 = 0_{16}
Соединяем шестнадцатеричные цифры:
(1011001110.01101101)_2 = (2CE.6D0)_{16}
Ответ: Шестнадцатеричный эквивалент числа (1011001110.01101101)2 равен (2CE.6D0)16.