Системы счисления. Перевод из одной системы в другую.
1. Порядковый счет в различных системах счисления.
В современной жизни мы используем позиционные системы счисления, то есть системы, в которых число, обозначаемое цифрой, зависит от положения цифры в записи числа. Поэтому в дальнейшем мы будем говорить только о них, опуская термин «позиционные».
Для того чтобы научиться переводить числа из одной системы в другую, поймем, как происходит последовательная запись чисел на примере десятичной системы.
Поскольку у нас десятичная система счисления, мы имеем 10 символов (цифр) для построения чисел. Начинаем порядковый счет: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Цифры закончились. Мы увеличиваем разрядность числа и обнуляем младший разряд: 10. Затем опять увеличиваем младший разряд, пока не закончатся все цифры: 11, 12, 13, 14, 15, 16, 17, 18, 19. Увеличиваем старший разряд на 1 и обнуляем младший: 20. Когда мы используем все цифры для обоих разрядов (получим число 99), опять увеличиваем разрядность числа и обнуляем имеющиеся разряды: 100. И так далее.
Попробуем сделать то же самое в 2-ной, 3-ной и 5-ной системах (введем обозначение для 2-ной системы, для 3-ной и т.д.):
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 10 | 3 |
4 | 100 | 11 | 4 |
5 | 101 | 12 | 10 |
6 | 110 | 20 | 11 |
7 | 111 | 21 | 12 |
8 | 1000 | 22 | 13 |
9 | 1001 | 100 | 14 |
10 | 1010 | 101 | 20 |
11 | 1011 | 102 | 21 |
12 | 1100 | 110 | 22 |
13 | 1101 | 111 | 23 |
14 | 1110 | 112 | 24 |
15 | 1111 | 120 | 30 |
Если система счисления имеет основание больше 10, то нам придется вводить дополнительные символы, принято вводить буквы латинского алфавита. Например, для 12-ричной системы кроме десяти цифр нам понадобятся две буквы ( и ):
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | |
11 | |
12 | 10 |
13 | 11 |
14 | 12 |
15 | 13 |
2.Перевод из десятичной системы счисления в любую другую.
Чтобы перевести целое положительное десятичное число в систему счисления с другим основанием, нужно это число разделить на основание. Полученное частное снова разделить на основание, и дальше до тех пор, пока частное не окажется меньше основания. В результате записать в одну строку последнее частное и все остатки, начиная с последнего.
Пример 1. Переведем десятичное число 46 в двоичную систему счисления.
Пример 2. Переведем десятичное число 672 в восьмеричную систему счисления.
Пример 3. Переведем десятичное число 934 в шестнадцатеричную систему счисления.
3. Перевод из любой системы счисления в десятичную.
Для того, чтобы научиться переводить числа из любой другой системы в десятичную, проанализируем привычную нам запись десятичного числа.
Точно так же обстоит дело и в других системах счисления, только умножать будем не на 10, 100 и пр., а на степени основания системы счисления. Для примера возьмем число 1201 в троичной системе счисления. Пронумеруем разряды справа налево начиная с нуля и представим наше число как сумму произведений цифры на тройку в степени разряда числа:
Это и есть десятичная запись нашего числа, т.е.
Пример 4. Переведем в десятичную систему счисления восьмеричное число 511.
Пример 5. Переведем в десятичную систему счисления шестнадцатеричное число 1151.
4. Перевод из двоичной системы в систему с основанием «степень двойки» (4, 8, 16 и т.д.).
Для преобразования двоичного числа в число с основанием «степень двойки» необходимо двоичную последовательность разбить на группы по количеству цифр равному степени справа налево и каждую группу заменить соответствующей цифрой новой системы счисления.
Например, Переведем двоичное 1100001111010110 число в восьмеричную систему. Для этого разобьем его на группы по 3 символа начиная справа (т.к. ), а затем воспользуемся таблицей соответствия и заменим каждую группу на новую цифру:
Таблицу соответствия мы научились строить в п.1.
0 | 0 |
1 | 1 |
10 | 2 |
11 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Т.е.
Пример 6. Переведем двоичное 1100001111010110 число в шестнадцатеричную систему.
0 | 0 |
1 | 1 |
10 | 2 |
11 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
5.Перевод из системы с основанием «степень двойки» (4, 8, 16 и т.д.) в двоичную.
Этот перевод аналогичен предыдущему, выполненному в обратную сторону: каждую цифру мы заменяем группой цифр в двоичной системе из таблицы соответствия.
Пример 7. Переведем шестнадцатеричное число С3A6 в двоичную систему счисления.
Для этого каждую цифру числа заменим группой из 4 цифр (т.к. ) из таблицы соответствия, дополнив при необходимости группу нулями вначале:
Перевод из одной системы счисления в другую
Для перевода чисел из одной системы счисления в другую необходимо владеть основными сведениями о системах счисления и форме представления чисел в них.
Количество s различных цифр, употребляемых в системе счисления, называется основанием, или базой системы счисления. В общем случае положительное число X в позиционной системе с основанием s может быть представлено в виде полинома:
где s — база системы счисления, — цифры, допустимые в данной системе счисления . Последовательность образует целую часть X, а последовательность — дробную часть X.
В вычислительной технике наибольшее применение нашли двоичная (BIN — binary), и двоично кодированные системы счисления: восьмеричная (OCT — octal), шестнадцатеричная (HEX — hexadecimal) и двоично-кодированная десятичная (BCD — binary coded decimal).
В дальнейшем для обозначения используемой системы счисления число будет заключаться в скобки, а в индексе указано основание системы. Число X по основанию s будет обозначено .
Если Вам не нужно углубляться в теорию, а нужно лишь получить результат, то воспользуйтесь Калькулятором онлайн Перевод целых чисел из десятичной системы счисления в другие системы.
Основанием системы счисления служит число 2 (s = 2) и для записи чисел используются только две цифры: 0 и 1. Чтобы представить любой разряд двоичного числа, достаточно иметь физический элемент с двумя чётко различными устойчивыми состояниями, одно из которых изображает 1, а другое 0.
Прежде чем заняться переводом из любой системы счисления в двоичную, нужно внимательно изучить пример записи числа в двоичной системе счисления:
Если Вам не нужно углубляться в теорию, а нужно лишь получить результат, то воспользуйтесь Калькулятором онлайн Перевод целых чисел из десятичной системы счисления в другие системы.
Эти системы счисления относятся к двоично-кодированным, в которых основание системы счисления представляет собой целую степень двойки: — для восьмеричной и — для шестнадцатеричной.
В восьмеричной системе счисления(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 |
0 | 0000 | 0 | 0 | 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 цифра заменяется соответственно триадой или тетрадой двоичных цифр, причём незначащие нули слева и справа отбрасываются.
Для рассмотренных ранее примеров это выглядит следующим образом:
Если Вам не нужно углубляться в теорию, а нужно лишь получить результат, то воспользуйтесь Калькулятором онлайн Перевод целых чисел из десятичной системы счисления в другие системы.
В двоично-десятичной системе вес каждого разряда равен степени 10, как в десятичной системе, а каждая десятичная цифра кодируется четырьмя двоичными цифрами. Для записи десятичного числа в BCD-системе достаточно заменить каждую десятичную цифру эквивалентной четырёхразрядной двоичной комбинацией:
Любое десятичное число можно представить в двоично-десятичной записи, но следует помнить, что это не двоичный эквивалент числа. Это видно из следующего примера:
Пусть X — число в системе счисления с основанием s, которое требуется представить в системе с основанием h. Удобно различать два случая.
В первом случае и, следовательно, при переходе к основанию h можно использовать арифметику этой системы. Метод преобразования состоит в представлении числа в виде многочлена по степеням s, а также в вычислении этого многочлена по правилам арифметики системы счисления с основанием h. Так, например, удобно переходить от двоичной или восьмеричной системы счисления к десятичной. Описанный приём иллюстрируют следующие примеры:
.
.
В обоих случаях арифметические действия выполняются по правилам системы счисления с основанием 10.
Во втором случае () удобнее пользоваться арифметикой по основанию s. Здесь следует учитывать, что перевод целых чисел и правильных дробей производится по различным правилам. При переводе смешанных дробей целая и дробная части переводятся каждая по своим правилам, после чего полученные числа записываются через запятую.
Перевод целых чисел
Правила перевода целых чисел становится ясным из общей формулы записи числа в произвольной позиционной системе. Пусть число в исходной системе счисления s имеет вид . Требуется получить запись числа в системе счисления с основанием h:
.
Для нахождения значений разделим этот многочлен на h:
.
Как видно, младший разряд , то есть , равен первому остатку. Следующий значащий разряд определяется делением частного на h:
.
Остальные также вычисляются путём деления частных до тех пор, пока не станет равным нулю.
Для перевода целого числа из s-ичной системы счисления в h-ичную необходимо последовательно делить это число и получаемые частные на h (по правилам системы счисления с основанием h) до тех пор, пока частное не станет равным нулю. Старшей цифрой в записи числа с основанием h служит последний остаток, а следующие за ней цифры образуют остатки от предшествующих делений, выписываемые в последовательности, обратной их получению.
Пример 1. Перевести число 75 из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы.
Решение:
Если Вам не нужно углубляться в теорию, а нужно лишь получить результат, то воспользуйтесь Калькулятором онлайн Перевод целых чисел из десятичной системы счисления в другие системы.
Перевод правильных дробей
Правильную дробь , имеющую в системе с основанием s вид , можно выразить в системе счисления с основанием h как многочлен вида
Старшая цифра может быть найдена умножением этого многочлена на h, т.е.
Если это произведение меньше 1, то цифра равна 0, если же оно больше или равно 1, то цифра равна целой части произведения. Следующая цифра справа определяется путём умножения дробной части указанного выше произведения на h и выделения его целой части и т.д. Процесс может оказаться бесконечным, т.к. не всегда можно представить дробь по основанию h конечным набором цифр.
Для перевода правильной дроби из системы счисления с основанием s в систему счисления с основанием h нужно умножать исходную дробь и дробные части получающихся произведений на основание h (по правилам «старой» s-системы счисления). Целые части полученных произведений дают последовательность цифр дроби в h-системе счисления.
Описанная процедура продолжается до тех пор, пока дробная часть очередного произведения не станет равной нулю либо не будет достигнута требуемая точность изображения числа X в h-ичной системе счисления. Представлением дробной части числа X в новой системе счисления будет последовательности целых частей полученных произведений, записанных в порядке их получения и изображённых h-ичной цифрой. Абсолютная погрешность перевода числа X при p знаков после запятой равняется .
Пример 2. Перевести правильную дробь 0,453 из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления.
* В двоичную систему:
Ответ:
** В восьмеричную систему:
Ответ:
*** В шестнадцатеричную систему:
Ответ: так как , то
Поделиться с друзьями
Системы счисления. Перевод из одной системы счисления в другую.
ПЕРЕВОД ЧИСЕЛ ИЗ ДВОИЧНОЙ СИСТЕМЫ В ДЕСЯТИЧНУЮ
Для перевода двоичного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания двоичной системы счисления на соответствующие цифры в разрядах двоичного числа.
Например, требуется перевести двоичное число 110101 в десятичное. В этом числе 6 цифр и 6 разрядов (разряды считаются, начиная с нулевого, которому соответствует младший бит). В соответствии с уже известным нам правилом представим его в виде суммы степеней с основанием 2:
1101012 = (1х25)+(1х24)+(0х23)+(1х22)+(0х21)+(1х20) = 32+16+4+1 = 5310
ПЕРЕВОД ЧИСЕЛ ИЗ ВОСЬМЕРИЧНОЙ СИСТЕМЫ В ДЕСЯТИЧНУЮ
Перевод производится по аналогии с переводом из двоичной в десятичную систему счисления.
Например, требуется перевести восьмеричное число 4754 в десятичное. В этом числе 4 цифры и 4 разряда ( разряды считаются, начиная с нулевого, которому соответствует младший бит). В соответствии с уже известным нам правилом представим его в виде суммы степеней с основанием 8:
47548 = (4х83)+(7х82)+(5х81)+(4х80) = 2048 + 448 + 40 + 4 = 254010
Переводы из других систем счисления в десятичную происходят по аналогии с вышеописанными способами.
ПЕРЕВОД ЧИСЕЛ ИЗ ДЕСЯТИЧНОЙ СИСТЕМЫ В ВОСЬМЕРИЧНУЮ
Для перевода чисел из десятичной системы счисления в восьмеричную используют тот же «алгоритм замещения», что и при переводе из десятичной системы счисления в двоичную, только в качестве делителя используют 8, основание восьмеричной системы счисления:
- Делим десятичное число х на 8. Частное у запоминаем для следующего шага, а остаток z записываем как младший разряд восьмеричного числа.
- Если частное у не равно 0, принимаем его за новое делимое и повторяем процедуру, описанную в первом шаге. Каждый новый остаток записывается в разряды восьмеричного числа в направлении от младшего разряда к старшему.
- Алгоритм продолжается до тех пор, пока в результате выполнения шагов 1 и 2 не получится частное у = 0 и остаток z меньше 8.
Например, требуется перевести десятичное число 450 в восьмеричное. В соответствии с приведенным алгоритмом получим:
45010: 8 = 5610 |
56 x 8 = 448 |
45010 — 44810 = 2, остаток 2 записываем в младший разряд восьмеричного числа. |
5610: 8 = 710 |
5610 — 5610 = 0, остаток 0 записываем в следующий разряд восьмеричного числа. |
710: 8 = 010 |
остаток 0, записываем 7 в самый старший разряд восьмеричного числа. |
Таким образом, искомое восьмеричное число равно 7028. |
ПЕРЕВОД ЧИСЕЛ ИЗ ДЕСЯТИЧНОЙ СИСТЕМЫ В ШЕСТНАДЦАТЕРИЧНУЮ
Для перевода используется алгоритм, аналогичный переводу из десятичной в восьмеричную.Например, требуется перевести десятичное число 450 в шестнадцатеричное. В соответствии с приведенным алгоритмом получим:
45010: 16 = 2810 |
28 х 16 = 448 |
45010 — 44810 = 2, остаток 2 записываем в младший разряд шестнадцатеричного числа. |
2810: 16 = 110 |
2810 — 1610 = 12, остаток 12 в виде C записываем в следующий разряд шестнадцатеричного числа. |
110: 16 = 010, остаток 1 записываем в старший разряд шестнадцатеричного числа. |
Таким образом, искомое шестнадцатеричное число равно 1C216.
Остальные переводы из десятичной системы счисления происходят по аналогии с вышеописанными способами.
Перевод из двоичной системы счисления в десятичную, шестнадцатеричную, и восьмеричную.
Для осуществления такого перевода удобно использовать таблицу триад и тетрад.
Строится она очень просто. Сначала записывается в столбик восемь нолей и 8 единиц. Затем в два раза меньше единиц и нолей с повтором. Затем ещё в два раза меньше. И так до тех пор, пока не получим столбик со значениями 1 0 1 0 1 0…
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 2 |
0 | 0 | 1 | 1 | 3 |
0 | 1 | 0 | 0 | 4 |
0 | 1 | 0 | 1 | 5 |
0 | 1 | 1 | 0 | 6 |
0 | 1 | 1 | 1 | 7 |
1 | 0 | 0 | 0 | 8 |
1 | 0 | 0 | 1 | 9 |
1 | 0 | 1 | 0 | A |
1 | 0 | 1 | 1 | B |
1 | 1 | 0 | 0 | C |
1 | 1 | 0 | 1 | D |
1 | 1 | 1 | 0 | E |
1 | 1 | 1 | 1 | F |
Таким образом можно получить двоичные значения каждого числа в десятичной, восьмеричной и шестнадцатеричной системе счисления. Например, из таблицы видно, что значение числа 9 в десятичной и шестнадцатеричной системе счисления равно 1001 в двоичной системе счисления.
Статью подготовил учитель информатики МБОУ «Школа №7» города Богородска Лосев Антон Владимирович.
Перевод чисел из одной системы счисления в другую
Цели урока:
- повторить изученный материал по теме система счисления ;
- научится переводить число из десятичной системы в любую другую позиционную систему счисления и наоборот;
- освоить принципы перевода чисел из одной системы в другую;
- развивать логическое мышление.
Ход урока
Вначале урока краткое повторение и проверка домашнего задания..
Вопросы:
— В каком виде представлена числовая информация в памяти компьютера?
— Для чего используются системы счисления?
— Какие виды систем счисления вы знаете? Привести свои примеры.
— Чем отличаются позиционные системы от непозиционных?.
Цель нашего урока научится переводить число из десятичной системы в любую другую позиционную систему счисления и наоборот. Но в начале мы рассмотрим, как можно
представить любое целое неотрицательное чисело:
В позиционных системах значение записи целого числа определяется по следующему правилу: пусть a na n-1a n-2…a 1a 0 — запись числа A, а i – цифры, тогда
A = a n·pn+a n-1·pn-1 +a n-2·pn-2+…+a 1·p1+ a0·p0 (1),
где p — целое число большее 1, которое называется основанием системы счисления
Для того, чтобы при заданном p любое неотрицательное целое число можно было бы записать по формуле (1) и притом единственным образом, числовые значения различных цифр должны быть различными целыми числами, принадлежащими отрезку от 0 до p-1.
Пример:
1) Десятичная система
p = 10
цифры: 0,1,2,3,4,5,6,7,8,9
число 5735 = 5·103+7·102+3·101+8·100
2) Троичная система
p = 3
цифры: 0,1,2
число 2013 = 2·32+0·31+1·30
Замечание: нижним индексом в записи числа обозначается основание системы счисления, в которой записано число. Для десятичной системы счисления индекс можно не писать.
Представление отрицательных и дробных чисел:
Во всех позиционных системах для записи отрицательных чисел так же как и в десятичной системе используется знак ‘–‘. Для отделения целой части числа от дробной используется запятая. Значение записи a na n-1a n-2…a 1a 0, a -1 a -2…a m-2 a m-1a m числа A определяется по формуле, являющейся обобщением формулы (1):
A = an·pn+a n-1·p n-1+a n-2·p n-2+…+a1·p1+a0·p0+a-1·p-1+a -2·p-2+…+am-2·p–(m–2)+am–1·p–(m–1)+amp–m (2),
Пример:
75,6 = 7·101+5·100+6·10–1
–2,3145 = –(2·50+3·5–1+1·5–2+4·5–3)
Перевод чисел из произвольной системы счисления в десятичную:
Следует понимать, что при переводе числа из одной системы счисления в другую количественное значение числа не изменяется, а меняется только форма записи числа, так же как при переводе названия числа, например, с русского языка на английский.
Перевод чисел из произвольной системы счисления в десятичную выполняется непосредственным вычислением по формуле (1) для целых и формуле (2) для дробных чисел.
Перевод чисел из десятичной системы счисления в произвольную.
Перевести число из десятичной системы в систему с основанием p – значит найти коэффициенты в формуле (2). Иногда это легко сделать простым подбором. Например, пусть нужно перевести число 23,5 в восьмеричную систему. Нетрудно заметить, что 23,5 = 16+7+0,5 = 2·8+7+4/8 = 2·81+7·80+4·8–1 =27,48. Понятно, что не всегда ответ столь очевиден. В общем случае применяется способ перевода отдельно целой и дробной частей числа.
Для перевода целых чисел применяется следующий алгоритм (полученный на основании формулы (1)):
1. Найдем частное и остаток от деления числа на p. Остаток будет очередной цифрой ai (j=0,1,2 …) записи числа в новой системе счисления.
2. Если частное равно нулю, то перевод числа закончен, иначе применяем к частному пункт 1.
Замечание 1. Цифры ai в записи числа нумеруются справа налево.
Замечание 2. Если p>10, то необходимо ввести обозначения для цифр с числовыми значениями, большими или равными 10.
Пример:
Перевести число 165 в семеричную систему счисления.
165:7 = 23 (остаток 4) => a0 = 4
23:7 = 3 (остаток 2) => a1 = 2
3:7 = 0 (остаток 3) => a2 = 3
Выпишем результат: a2a1a0, т.е. 3247.
Выполнив проверку по формуле (1), убедимся в правильности перевода:
3247=3·72+2·71+4·70=3·49+2·7+4 = 147+14+4 = 165.
Для перевода дробных частей чисел применяется алгоритм, полученный на основании формулы (2):
1. Умножим дробную часть числа на p.
2. Целая часть результата будет очередной цифрой am (m = –1,–2, –3 …) записи числа в новой системе счисления. Если дробная часть результата равна нулю, то перевод числа закончен, иначе применяем к ней пункт 1.
Замечание 1. Цифры am в записи числа располагаются слева направо в порядке возрастания абсолютного значения m.
Замечание 2. Обычно количество дробных разрядов в новой записи числа ограничивается заранее. Это позволяет выполнить приближенный перевод с заданной точностью. В случае бесконечных дробей такое ограничение обеспечивает конечность алгоритма.
Пример 1:
Перевести число 0,625 в двоичную систему счисления.
0,625·2 = 1,25 (целая часть 1) => a-1 =1
0,25·2 = 0,5 (целая часть 0) => a-2 = 0
0,5·2 = 1,00 (целая часть 1) => a-3 = 1
Итак, 0,62510 = 0,1012
Выполнив проверку по формуле (2), убедимся в правильности перевода:
0,1012=1·2-1+0·2-2+1·2-3=1/2+1/8 = 0,5+0,125 = 0,625.
Пример 2:
Перевести число 0,165 в четверичную систему счисления, ограничившись четырьмя четверичными разрядами.
0,165·4 = 0,66 (целая часть 0) => a-1=0
0,66·4 = 2,64 (целая часть 2) => a-2= 2
0,64·4 = 2,56 (целая часть 2) => a-3= 2
0,56·4 = 2,24 (целая часть 2) => a-4= 2
Итак, 0,16510 ” 0,02224
Выполним обратный перевод, чтобы убедиться, что абсолютная погрешность не превышает 4–4:
0,02224 = 0·4-1+2·4-2+2·4-3+2·4-4= 2/16+2/64+2/256 = 1/8+1/32+1/128 = 21/128 = 0,1640625
|0,1640625–0,165| = 0,00094 < 4–4 = 0,00390625
Перевод чисел из одной произвольной системы в другую
В этом случае сначала следует выполнить перевод числа в десятичную систему, а затем из десятичной в требуемую.
Особым способом выполняется перевод чисел для систем с кратными основаниями.
Пусть p и q – основания двух систем счисления. Будем называть эти системы системами счисления с кратными основаниями, если p = qn или q = pn, где n – натуральное число. Так, например, системы счисления с основаниями 2 и 8 являются системами счисления с кратными основаниями.
Пусть p = qn и требуется перевести число из системы счисления с основанием q в систему счисления с основанием p. Разобьем целую и дробную части записи числа на группы по n последовательно записанных цифр влево и вправо от запятой. Если количество цифр в записи целой части числа не кратно n, то надо дописать слева соответствующее количество нулей. Если количество цифр в записи дробной части числа не кратно n, то нули дописываются справа. Каждая такая группа цифр числа в старой системе счисления будет соответствовать одной цифре числа в новой системе счисления.
Пример:
Переведем 1100001,1112 в четверичную систему счисления.
Дописав нули и выделив пары цифр, получим 01100001,11102.
Теперь выполним перевод отдельно каждой пары цифр, пользуясь пунктом Перевод чисел из одной произвольной системы в другую.
012=110=14
102=210=24
002=010=04
012=110=14
112=310=34
102=210=24
Итак, 1100001,1112 = 01100001,11102 = 1201,324.
Пусть теперь требуется выполнить перевод из системы с большим основанием q, в систему с меньшим основанием p, т.е. q = pn. В этом случае одной цифре числа в старой системе счисления соответствует n цифр числа в новой системе счисления.
Пример: Выполним проверку предыдущего перевода числа.
1201,324 = 1100001,11102=1100001,1112
В шестнадцатеричной системе есть цифры с числовыми значениями 10,11,12, 13,14,15. Для их обозначения используют первые шесть букв латинского алфавита A, B, C, D, E, F.
Приведем таблицу чисел от 0 до 16, записанных в системах счисления с основаниями 10, 2, 8 и 16.
Число в десятичной системе счисления | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
В восьмеричной | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 |
В двоичной | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
В шестнадцатеричной | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
Для записи шестнадцатеричных цифр можно использовать также строчные латинские буквы a-f.
Пример: Переведем число 110101001010101010100,112 в шестнадцатеричную систему счисления.
Воспользуемся кратностью оснований систем счисления (16=24). Сгруппируем цифры по четыре, дописав, слева и справа нужное количество нулей
000110101001010101010100,11002
и, сверяясь с таблицей, получим: 1A9554,C16
Вывод:
В какой системе счисления лучше записывать числа – это вопрос удобства и традиций. С технической точки зрения, в ЭВМ удобно использовать двоичную систему, так как в ней для записи числа используются только две цифры 0 и 1, которые можно представить двумя легко различимыми состояниями “нет сигнала ” и “есть сигнал”.
А человеку, напротив, неудобно иметь дело с двоичными записями чисел из-за того, что они более длинные, чем десятичные и в них много повторяющихся цифр. Поэтому, при необходимости работать с машинными представлениями чисел используют восьмеричную или шестнадцатеричную системы счисления. Основания этих систем – целые степени двойки, и поэтому числа легко переводятся из этих систем в двоичную и обратно.
Записываем задание на дом:
а) Запишите дату рождения всех членов вашей семьи в различных системах счисления.
б) Переведите числа из двоичной системы в восьмеричную и шестнадцатеричную, а затем проверьте результаты, выполнив обратные переводы:
а) 1001111110111,0112 ;
б) 1110101011,10111012
2.3.1. Перевод целых чисел из одной системы счисления в другуюМожно сформулировать алгоритм перевода целых чисел из системы с основанием p в систему с основанием q : 1. Основание новой системы счислениявыразитьцифрамиисходной системы счисления ивсепоследующие действия производить в исходной системе счисления. 2. Последовательно выполнять деление данного числаиполучаемых целых частных на основание новой системы счисления до тех пор, пока не получим частное, меньшее делителя. 3. Полученныеостатки,являющиеся цифрами числа в новой системе счисления, привести в соответствие с алфавитом новой системы счисления. 4. Составить число в новой системе счисления, записывая его, начиная с последнего остатка. Пример 2.12. Перевестидесятичное число 173 10 в восьмеричную систему счисления: Получаем:173 10 =255 8 Пример 2.13. Перевести десятичное число 173 10 в шестнадцатеричную систему счисления: Получаем: 173 10 =AD 16 . Пример 2.14. Перевести десятичное число 11 10 в двоичную систему счисления. Рассмотреннуювыше последовательность действий (алгоритм перевода) удобнее изобразить так: Получаем: 11 10 =1011 2 . Пример 2.15. Иногда более удобно записать алгоритм перевода в форме таблицы. Переведем десятичное число 363 10 в двоичное число. Получаем: 363 10 =101101011 2 2.3.2. Перевод дробных чисел из одной системысчисленияв другуюМожно сформулировать алгоритм перевода правильнойдроби с основанием p в дробь с основанием q: 1. Основание новой системы счислениявыразитьцифрамиисходной системы счисленияивсепоследующие действия производить в исходной системе счисления. 2. Последовательноумножатьданноечислои получаемые дробные части произведений на основание новой системы до тех пор, пока дробная часть произведенияне станет равной нулю или будет достигнута требуемая точность представления числа. 3. Полученные целые части произведений,являющиеся цифрами числа в новой системе счисления,привести в соответствие с алфавитомновой системы счисления. 4. Составить дробную часть числа в новой системе счисления, начиная с целой части первого произведения. Пример 2.17. Перевести число 0,65625 10 в восьмеричную систему счисления. Получаем: 0,65625 10 =0,52 8 Пример 2.17. Перевести число 0,65625 10 вшестнадцатеричнуюсистему счисления. Получаем: 0,65625 10 =0,А8 1 Пример 2.18. Перевестидесятичнуюдробь 0,5625 10 в двоичную систему счисления. Получаем: 0,5625 10 =0,1001 2 Пример 2.19. Перевести в двоичную систему счисления десятичную дробь 0.7 10 . Очевидно, чтоэтот процесс может продолжаться бесконечно,давая все новые и новые знакивизображениидвоичногоэквивалентачисла 0,7 10 . Так,за четыре шага мы получаем число 0,1011 2 , а за семь шагов число 0,1011001 2 ,которое является более точным представлениемчисла 0,7 10 в двоичной системе счисления,и т.д.Такой бесконечный процесс обрывают на некотором шаге, когда считают, что получена требуемая точность представления числа. 2.3.3. Перевод произвольных чиселПеревод произвольных чисел,т.е. чисел, содержащих целую и дробную части,осуществляется в два этапа.Отдельно переводится целая часть, отдельно — дробная. В итоговой записи полученного числа целая часть отделяется от дробной запятой (точкой). Пример 2.20 . Перевести число 17,25 10 в двоичную систему счисления. Получаем: 17,25 10 =1001,01 2 Пример 2.21. Перевести число 124,25 10 в восьмеричную систему. Получаем: 124,25 10 =174,2 8 2.3.4. Перевод чисел из системы счисления с основанием 2 в систему счисления с основанием 2 n и обратноПеревод целых чисел. Если основание q-ичной системы счисления является степеньючисла 2, топереводчисел из q-ичной системы счисления в 2-ичную и обратно можно проводить по более простым правилам. Для того, чтобы целое двоичное число записать в системе счисления с основанием q=2 n , нужно: 1. Двоичное число разбить справа налево на группы по nцифр в каждой. 2. Если в последней левой группе окажется меньше n разрядов, то ее надо дополнить слева нулями до нужного числа разрядов. Пример 2.22. Число 101100001000110010 2 переведем в восьмеричную систему счисления. Разбиваем число справа налево на триады и под каждой из них записываем соответствующую восьмеричную цифру: Получаем восьмеричное представление исходного числа: 541062 8 . Пример 2.23. Число 1000000000111110000111 2 переведем в шестнадцатеричную систему счисления. Разбиваем числосправа налево на тетрады и под каждой из них записываем соответствующую шестнадцатеричную цифру: Получаем шестнадцатеричноепредставлениеисходногочисла: 200F87 16 . Перевод дробных чисел. Длятого,чтобыдробное двоичное число записать в системе счисления с основанием q=2 n , нужно: 1. Двоичное число разбить слева направо на группы по nцифр в каждой. 2. Еслив последней правой группе окажется меньше n разрядов,то ее надо дополнить справа нулями до нужного числа разрядов. 3. Рассмотреть каждую группу как n-разрядное двоичное число изаписать ее соответствующей цифрой в системе счисления с основанием q=2 n . Пример 2.24. Число0,10110001 2 переведем в восьмеричную систему счисления. Разбиваем число слева направо на триады и под каждой из них записываем соответствующую восьмеричную цифру: Получаем восьмеричное представление исходного числа: 0,542 8 . Пример 2.25. Число0,100000000011 2 переведем в шестнадцатеричную систему счисления. Разбиваем число слева направо на тетрады и под каждой из них записываем соответствующую шестнадцатеричную цифру: Получаем шестнадцатеричноепредставлениеисходногочисла: 0,803 16 Перевод произвольных чисел. Для того, чтобы произвольное двоичное число записать в системе счисления с основанием q=2 n , нужно: 1. Целую часть данногодвоичногочисларазбитьсправа налево, а дробную — слева направо на группы по n цифр в каждой. 2. Если в последних левой и/или правой группах окажется меньше n разрядов, то их надо дополнить слева и/или справа нулямидо нужного числа разрядов; 3.Рассмотретькаждую группу как n-разрядное двоичное число и записать ее соответствующей цифрой в системе счисления с основанием q=2 n Пример 2.26. Число 111100101,0111 2 переведем в восьмеричную систему счисления. Разбиваем целую и дробную части числа на триады и под каждой из них записываем соответствующую восьмеричную цифру: Получаем восьмеричное представление исходного числа: 745,34 8 . Пример 2.27. Число11101001000,11010010 2 переведем в шестнадцатеричную систему счисления. Разбиваем целую и дробную части числа на тетрадыи под каждой из них записываем соответствующую шестнадцатеричную цифру: Получаем шестнадцатеричное представление исходного числа: 748,D2 16 . Перевод чисел из систем счисления с основанием q=2 n в двоичную систему. Для того, чтобы произвольное число, записанное в системе счисления с основанием q=2 n , перевести в двоичную систему счисления, нужно каждую цифру этого числа заменить ее n-значным эквивалентом в двоичной системе счисления. Пример 2.28 .Переведем шестнадцатеричное число 4АС35 16 вдвоичную систему счисления. В соответствии с алгоритмом: Получаем: 1001010110000110101 2 . Задания для самостоятельного выполнения (Ответы )2.38. Заполните таблицу, в каждой строке которой одно и то же целое число должно быть записано в различных системах счисления.
2.39. Заполните таблицу, в каждой строке которой одно и то же дробное число должно быть записано в различных системах счисления.
2.40. Заполните таблицу, в каждой строке которой одно и то же произвольное число (число может содержать как целую, так и дробную часть) должно быть записано в различных системах счисления.
|
Таблица 1 | |||
---|---|---|---|
Система счисления | |||
10 | 2 | 8 | 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 |
Перевод чисел из одной системы счисления в другую
Для перевода чисел с одной системы счисления в другую, проще всего сначала перевести число в десятичную систему счисления, а затем, из десятичной системы счисления перевести в требуемую систему счисления.
Перевод чисел из любой системы счисления в десятичную систему счисления
С помощью формулы (1) можно перевести числа из любой системы счисления в десятичную систему счисления.
Пример 1. Переводить число 1011101.001 из двоичной системы счисления (СС) в десятичную СС. Решение:
1 ·2 6 +0 ·2 5 +1 ·2 4 +1 ·2 3 +1 ·2 2 +0 ·2 1 +1 ·2 0 +0 ·2 -1 +0 ·2 -2 +1 ·2 -3 =64+16+8+4+1+1/8=93.125
Пример 2. Переводить число 1011101.001 из восьмеричной системы счисления (СС) в десятичную СС. Решение:
Пример 3 . Переводить число AB572.CDF из шестнадцатеричной системы счисления в десятичную СС. Решение:
Здесь A -заменен на 10, B — на 11, C — на 12, F — на 15.
Перевод чисел из десятичной системы счисления в другую систему счисления
Для перевода чисел из десятичной системы счисления в другую систему счисления нужно переводить отдельно целую часть числа и дробную часть числа.
Целую часть числа переводится из десятичной СС в другую систему счисления — последовательным делением целой части числа на основание системы счисления (для двоичной СС — на 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 | ||||
0 | 2 | 1 | |||||
0 |
Как видно из Рис. 1, число 159 при делении на 2 дает частное 79 и остаток 1. Далее число 79 при делении на 2 дает частное 39 и остаток 1 и т.д. В результате построив число из остатков деления (справа налево) получим число в двоичной СС: 10011111 . Следовательно можно записать:
159 10 =10011111 2 .
Пример 5 . Переведем число 615 из десятичной СС в восьмеричную СС.
615 | 8 | ||
608 | 76 | 8 | |
7 | 72 | 9 | 8 |
4 | 8 | 1 | |
1 |
При приведении числа из десятичной СС в восьмеричную СС, нужно последовательно делить число на 8, пока не получится целый остаток меньшее, чем 8. В результате построив число из остатков деления (справа налево) получим число в восьмеричной СС: 1147 (см. Рис. 2). Следовательно можно записать:
615 10 =1147 8 .
Пример 6 . Переведем число 19673 из десятичной системы счисления в шестнадцатеричную СС.
19673 | 16 | ||
19664 | 1229 | 16 | |
9 | 1216 | 76 | 16 |
13 | 64 | 4 | |
12 |
Как видно из рисунка Рис.3, последовательным делением числа 19673 на 16 получили остатки 4, 12, 13, 9. В шестнадцатеричной системе счисления числе 12 соответствует С, числе 13 — D. Следовательно наше шестнадцатеричное число — это 4CD9.
Для перевода правильных десятичных дробей (вещественное число с нулевой целой частью) в систему счисления с основанием s необходимо данное число последовательно умножить на s до тех пор, пока в дробной части не получится чистый нуль, или же не получим требуемое количество разрядов. Если при умножении получится число с целой частью, отличное от нуля, то эту целую часть не учитывать (они последовательно зачисливаются в результат).
Рассмотрим вышеизложенное на примерах.
Пример 7 . Переведем число 0.214 из десятичной системы счисления в двоичную СС.
0.214 | ||
x | 2 | |
0 | 0.428 | |
x | 2 | |
0 | 0.856 | |
x | 2 | |
1 | 0.712 | |
x | 2 | |
1 | 0.424 | |
x | 2 | |
0 | 0.848 | |
x | 2 | |
1 | 0.696 | |
x | 2 | |
1 | 0.392 |
Как видно из Рис.4, число 0.214 последовательно умножается на 2. Если в результате умножения получится число с целой частью, отличное от нуля, то целая часть записывается отдельно (слева от числа), а число записывается с нулевой целой частью. Если же при умножении получиться число с нулевой целой частью, то слева от нее записывается нуль. Процесс умножения продолжается до тех пор, пока в дробной части не получится чистый нуль или же не получим требуемое количество разрядов. Записывая жирные числа (Рис.4) сверху вниз получим требуемое число в двоичной системе счисления: 0.0011011 .
Следовательно можно записать:
0.214 10 =0.0011011 2 .
Пример 8 . Переведем число 0.125 из десятичной системы счисления в двоичную СС.
0.125 | ||
x | 2 | |
0 | 0.25 | |
x | 2 | |
0 | 0.5 | |
x | 2 | |
1 | 0.0 |
Для приведения числа 0.125 из десятичной СС в двоичную, данное число последовательно умножается на 2. В третьем этапе получилось 0. Следовательно, получился следующий результат:
0.125 10 =0.001 2 .
Пример 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 |
Следуя примерам 4 и 5 получаем числа 3, 6, 12, 8, 11, 4. Но в шестнадцатеричной СС числам 12 и 11 соответствуют числа C и B. Следовательно имеем:
0.214 10 =0.36C8B4 16 .
Пример 10 . Переведем число 0.512 из десятичной системы счисления в восьмеричную СС.
0.512 | ||
x | 8 | |
4 | 0.096 | |
x | 8 | |
0 | 0.768 | |
x | 8 | |
6 | 0.144 | |
x | 8 | |
1 | 0.152 | |
x | 8 | |
1 | 0.216 | |
x | 8 | |
1 | 0.728 |
Получили:
0.512 10 =0.406111 8 .
Пример 11 . Переведем число 159.125 из десятичной системы счисления в двоичную СС. Для этого переведем отдельно целую часть числа (Пример 4) и дробную часть числа (Пример 8). Далее объединяя эти результаты получим:
159.125 10 =10011111.001 2 .
Пример 12 . Переведем число 19673.214 из десятичной системы счисления в шестнадцатеричную СС. Для этого переведем отдельно целую часть числа (Пример 6) и дробную часть числа (Пример 9). Далее объединяя эти результаты получим.
Чтобы быстро переводить числа из десятичной системы счисления в двоичную, нужно хорошо знать числа «2 в степени». Например, 2 10 =1024 и т.д. Это позволит решать некоторые примеры на перевод буквально за секунды. Одной из таких задач является задача A1 из демо ЕГЭ 2012 года . Можно, конечно, долго и нудно делить число на «2». Но лучше решать по-другому, экономя драгоценное время на экзамене.
Метод очень простой. Суть его такая: если число, которое нужно перевести из десятичной системы, равно числу «2 в степени», то это число в двоичной системе содержит количество нулей, равное степени. Впереди этих нулей добавляем «1».
- Переведем число 2 из десятичной системы. 2=2 1 . Поэтому в двоичной системе число содержит 1 нуль . Впереди ставим «1» и получаем 10 2 .
- Переведем 4 из десятичной системы. 4=2 2 . Поэтому в двоичной системе число содержит 2 нуля . Впереди ставим «1» и получаем 100 2.
- Переведем 8 из десятичной системы. 8=2 3 . Поэтому в двоичной системе число содержит 3 нуля . Впереди ставим «1» и получаем 1000 2.
Аналогично и для других чисел «2 в степени».
Если число, которое нужно перевести, меньше числа «2 в степени» на 1, то в двоичной системе это число состоит только из единиц, количество которых равно степени.
- Переведем 3 из десятичной системы. 3=2 2 -1. Поэтому в двоичной системе число содержит 2 единицы . Получаем 11 2.
- Переведем 7 из десятичной системы. 7=2 3 -1. Поэтому в двоичной системе число содержит 3 единицы . Получаем 111 2.
На рисунке квадратиками обозначено двоичное представление числа, а слева розовым цветом-десятичное.
Аналогичен перевод и для других чисел «2 в степени-1».
Понятно, что перевод чисел от 0 до 8 можно сделать быстро или делением, или просто знать наизусть их представление в двоичной системе. Я привела эти примеры, чтобы Вы поняли принцип данного метода и использовали его для перевода более «внушительных чисел», например, для перевода чисел 127,128, 255, 256, 511, 512 и т.д.
Можно встретить такие задачи, когда нужно перевести число, не равное числу «2 в степени», но близкое к нему. Оно может быть больше или меньше числа «2 в степени». Разница между переводимым числом и числом «2 в степени» должна быть небольшая. Например, до 3. Представление чисел от 0 до 3 в двоичной системе надо просто знать без перевода.
Если число
больше
, то решаем так:
Переводим сначала число «2 в степени» в двоичную систему. А потом прибавляем к нему разницу между числом «2 в степени» и переводимым числом.
Например, переведем 19 из десятичной системы. Оно больше числа «2 в степени» на 3.
16=2 4 . 16 10 =10000 2 .
3 10 =11 2 .
19 10 =10000 2 +11 2 =10011 2 .
Если число меньше числа «2 в степени», то удобнее пользоваться числом «2 в степени-1». Решаем так:
Переводим сначала число «2 в степени-1» в двоичную систему. А потом вычитаем из него разницу между числом «2 в степени-1» и переводимым числом.
Например, переведем 29 из десятичной системы. Оно больше числа «2 в степени-1» на 2. 29=31-2.
31 10 =11111 2 .
2 10 =10 2 .
29 10 =11111 2 -10 2 =11101 2
Если разница между переводимым числом и числом «2 в степени» больше трех , то можно разбить число на составляющие, перевести каждую часть в двоичную систему и сложить.
Например, перевести число 528 из десятичной системы. 528=512+16. Переводим отдельно 512 и 16.
512=2 9
. 512 10 =1000000000
2 .
16=2 4
. 16 10 =10000
2 .
Теперь сложим столбиком:
Сдающим ЕГЭ и не только…
Странно, что в школах на уроках информатики обычно показывают ученикам самый сложный и неудобный способ перевода чисел из одной системы в другую. Это способ заключается в последовательном делении исходного числа на основание и сборе остатков от деления в обратном порядке.
Например, нужно перевести число 810 10 в двоичную систему:
Результат записываем в обратном порядке снизу вверх. Получается 81010 = 11001010102
Если нужно переводить в двоичную систему довольно большие числа, то лестница делений приобретает размер многоэтажного дома. И как тут собрать все единички с нулями и ни одной не пропустить?
В программу ЕГЭ по информатике входят несколько задач, связанных с переводом чисел из одной системы в другую. Как правило, это преобразование между 8- и 16-ричными системами и двоичной. Это разделы А1, В11. Но есть и задачи с другими системами счисления, как например, в разделе B7.
Для начала напомним две таблицы, которые хорошо бы знать наизусть тем, кто выбирает информатику своей дальнейшей профессией.
Таблица степеней числа 2:
2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 2 10 |
2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 |
Она легко получается умножением предыдущего числа на 2. Так, что если помните не все эти числа, остальные нетрудно получить в уме из тех, которые помните.
Таблица двоичных чисел от 0 до 15 c 16-ричным представлением:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
Недостающие значения тоже нетрудно вычислить, прибавляя по 1 к известным значениям.
Перевод целых чисел
Итак, начнем с перевода сразу в двоичную систему. Возьмём то же число 810 10 . Нам нужно разложить это число на слагаемые, равные степеням двойки.
- Ищем ближайшую к 810 степень двойки, не превосходящую его. Это 2 9 = 512.
- Вычитаем 512 из 810, получаем 298.
- Повторим шаги 1 и 2, пока не останется 1 или 0.
- У нас получилось так: 810 = 512 + 256 + 32 + 8 + 2 = 2 9 + 2 8 + 2 5 + 2 3 + 2 1 .
Способ 1 : Расставить 1 по тем разрядам, какие получились показатели у слагаемых. В нашем примере это 9, 8, 5, 3 и 1. В остальных местах будут стоять нули. Итак, мы получили двоичное представление числа 810 10 = 1100101010 2 . Единицы стоят на 9-м, 8-м, 5-м, 3-м и 1-м местах, считая справа налево с нуля.
Способ 2 : Распишем слагаемые как степени двойки друг под другом, начиная с большего.
810 =
А теперь сложим эти ступеньки вместе, как складывают веер: 1100101010 .
Вот и всё. Попутно также просто решается задача «сколько единиц в двоичной записи числа 810?».
Ответ — столько, сколько слагаемых (степеней двойки) в таком его представлении. У 810 их 5.
Теперь пример попроще.
Переведём число 63 в 5-ричную систему счисления. Ближайшая к 63 степень числа 5 — это 25 (квадрат 5). Куб (125) будет уже много. То есть 63 лежит между квадратом 5 и кубом. Тогда подберем коэффициент для 5 2 . Это 2.
Получаем 63 10 = 50 + 13 = 50 + 10 + 3 = 2 * 5 2 + 2 * 5 + 3 = 223 5 .
Ну и, наконец, совсем лёгкие переводы между 8- и 16-ричными системами. Так как их основанием является степень двойки, то перевод делается автоматически, просто заменой цифр на их двоичное представление. Для 8-ричной системы каждая цифра заменяется тремя двоичными разрядами, а для 16-ричной четырьмя. При этом все ведущие нули обязательны, кроме самого старшего разряда.
Переведем в двоичную систему число 547 8 .
547 8 = | 101 | 100 | 111 |
5 | 4 | 7 |
Ещё одно, например 7D6A 16 .
7D6A 16 = | (0)111 | 1101 | 0110 | 1010 |
7 | D | 6 | A |
Переведем в 16-ричную систему число 7368. Сначала цифры запишем тройками, а потом поделим их на четверки с конца: 736 8 = 111 011 110 = 1 1101 1110 = 1DE 16 . Переведем в 8-ричную систему число C25 16 . Сначала цифры запишем четвёрками, а потом поделим их на тройки с конца: C25 16 = 1100 0010 0101 = 110 000 100 101 = 6045 8 . Теперь рассмотрим перевод обратно в десятичную. Он труда не представляет, главное не ошибиться в расчётах. Раскладываем число на многочлен со степенями основания и коэффициентами при них. Потом всё умножаем и складываем. E68 16 = 14 * 16 2 + 6 * 16 + 8 = 3688 . 732 8 = 7 * 8 2 + 3*8 + 2 = 474 .
Перевод отрицательных чисел
Здесь нужно учесть, что число будет представлено в дополнительном коде. Для перевода числа в дополнительный код нужно знать конечный размер числа, то есть во что мы хотим его вписать — в байт, в два байта, в четыре. Старший разряд числа означает знак. Если там 0, то число положительное, если 1, то отрицательное. Слева число дополняется знаковым разрядом. Беззнаковые (unsigned) числа мы не рассматриваем, они всегда положительные, а старший разряд в них используется как информационный.
Для перевода отрицательного числа в двоичный дополнительный код нужно перевести положительное число в двоичную систему, потом поменять нули на единицы и единицы на нули. Затем прибавить к результату 1.
Итак, переведем число -79 в двоичную систему. Число займёт у нас один байт.
Переводим 79 в двоичную систему, 79 = 1001111. Дополним слева нулями до размера байта, 8 разрядов, получаем 01001111. Меняем 1 на 0 и 0 на 1. Получаем 10110000. К результату прибавляем 1, получаем ответ 10110001 . Попутно отвечаем на вопрос ЕГЭ «сколько единиц в двоичном представлении числа -79?». Ответ — 4.
Прибавление 1 к инверсии числа позволяет устранить разницу между представлениями +0 = 00000000 и -0 = 11111111. В дополнительном коде они будут записаны одинаково 00000000.
Перевод дробных чисел
Дробные числа переводятся способом, обратным делению целых чисел на основание, который мы рассмотрели в самом начале. То есть при помощи последовательного умножения на новое основание с собиранием целых частей. Полученные при умножении целые части собираются, но не участвуют в следующих операциях. Умножаются только дробные. Если исходное число больше 1, то целая и дробная части переводятся отдельно, потом склеиваются.
Переведем число 0,6752 в двоичную систему.
0 | ,6752 |
*2 | |
1 | ,3504 |
*2 | |
0 | ,7008 |
*2 | |
1 | ,4016 |
*2 | |
0 | ,8032 |
*2 | |
1 | ,6064 |
*2 | |
1 | ,2128 |
Процесс можно продолжать долго, пока не получим все нули в дробной части или будет достигнута требуемая точность. Остановимся пока на 6-м знаке.
Получается 0,6752 = 0,101011 .
Если число было 5,6752, то в двоичном виде оно будет 101,101011 .
Перевод из одной системы счисления в другую
Для перевода чисел из одной системы счисления в любую другую, воспользуемся соответствующим алгоритмом. Важно заметить, что алгоритм перевода целых и дробных чисел будет отличаться.
Алгоритм перевода из произвольных чисел в любую систему счисления
- Перевести q-ичное число в десятичную систему счисления;
- Полученное десятичное число перевести в требуемую систему.
Подробно о переводе в десятичную систему смотрите на этой странице, о переводе из десятичной в q-ричную- здесь. Для целостного понимания, разберем несколько примеров, но для начала вспомним алфавиты в популярных системах счисления:
Основание | Название | Алфавит |
---|---|---|
2 | Двоичная | 0, 1 |
8 | Восьмеричная | 0, 1, 2, 3, 4, 5, 6, 7 |
10 | Десятичная | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 |
16 | Шестнадцатеричная | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F |
Перевод целого q-ичного числа в систему счисления с новым основанием
Пример 1: перевести число 1101100 из двоичной в троичную систему.
Как было сказано выше, необходимо сначала перевести число в десятичное, а полученный ответ в троиную. Решение будет выглядеть следующим образом:
Для перевода шестнадцатеричного числа 1a316 в десятичную систему, воспользуемся формулой:
An = an-1 ∙ qn-1 + an-2 ∙ qn-2 + ∙∙∙ + a0 ∙ q0
Отсюда:
11011002=1 ∙ 26 + 1 ∙ 25 + 0 ∙ 24 + 1 ∙ 23 + 1 ∙ 22 + 0 ∙ 21 + 0 ∙ 20 = 1 ∙ 64 + 1 ∙ 32 + 0 ∙ 16 + 1 ∙ 8 + 1 ∙ 4 + 0 ∙ 2 + 0 ∙ 1 = 64 + 32 + 0 + 8 + 4 + 0 + 0 = 10810
Таким образом:
11011002 = 10810
Полученное число 108 переведем из десятичной системы счисления в троичную. Для этого, осуществим последовательное деление на 3, до тех пор пока остаток не будет меньше чем 3.
Полученные остатки записываем в обратном порядке, таким образом:
10810=110003
Ответ: 11011002 = 110003.
Пример 2: перевести число 345 из шестеричной в восьмеричную систему.
Аналогично предыдущему примеру произведем вычисления:
3456=3 ∙ 62 + 4 ∙ 61 + 5 ∙ 60 = 3 ∙ 36 + 4 ∙ 6 + 5 ∙ 1 = 108 + 24 + 5 = 13710
Таким образом:
3456 = 13710
Полученное число 137 переведем из десятичной системы счисления в восьмеричную. Для этого, осуществим последовательное деление на 8, до тех пор пока остаток не будет меньше чем 8.
Полученные остатки записываем в обратном порядке, таким образом:
13710=2118
Ответ: 3456 = 2118.
Перевод любого дробного числа из одной системы в другую
Пример 3: перевести 231.20 из четверичной в семеричную систему счисления.
Общий смысл алгоритма перевода дробного числа, аналогичен алгоритму перевода целого, т.е. вначале переводим в десятичную, а затем в семеричную:
1. Для перевода числа 231.20 в десятичную систему воспользуемся формулой:
An = an-1 ∙ qn-1 + an-2 ∙ qn-2 + ∙∙∙ + a0 ∙ q0 + a-1 ∙ q-1 + ∙∙∙ + a-m ∙ q-m
Отсюда:
231.204=2 ∙ 42 + 3 ∙ 41 + 1 ∙ 40 + 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 переведем из десятичной системы счисления в семеричную. Т.к. полученное число содержит дробную часть, нам потребуется перевести вначале целую часть, а затем дробную. Таким образом необходимо:
- Перевести 45 в семеричную систему;
- Перевести 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.
Оцените материал:
Загрузка…Поделиться с друзьями:
Перевод чисел из одной системы счисления в другую
Видео YouTube
Варианты заданийВариант 1
1. 860(10); 785(10); 149,375(10).
2. 1001010(2); 110101101,00011(2); 775,11(8); 294,3(16).
Вариант 2
1. 250(10); 757(10); 711,625(10).
2. 1111000(2); 111101100,01101(2); 1233,5(8); 2В3,F4(16).
Вариант 3
1. 759(10); 265(10); 360,25(10).
2. 1001101(2); 100111001,01(2); 1461,15(8); 9D,A(16).
Вариант 4
1. 216(10); 336(10); 714,125(10).
2. 1100000110(2); 1011010,011(2); 1537,22(8); 2D9,8(16).
Вариант 5
1. 530(10); 265(10); 597,25(10).
2. 101000111(2); 100101010,01(2); 1317,75(8); 2F4,0C(16).
Вариант 6
1. 9450(10); 857(10); 444,125(10).
2. 11001111(2); 111010001,001(2); 1763,5(8); 3D2,04(16).
Вариант 7
1. 287(10); 220(10); 332,1875(10).
2. 10101000(2); 10000010000,01001(2); 1714,2(8); DD,3(16).
Вариант 8
1. 485(10); 970(10); 426,375(10).
2. 10101000(2); 1010101,101(2); 721,2(8); 3C9,8(16).
Вариант 9
1. 639(10); 4857(10); 5181,25(10).
2. 1011000011(2); 1100101101,1(2); 1046,4(8); 3883,64(16).
Вариант 10
1. 618(10); 556(10); 129,25(10).
2. 1111011011(2); 1001110110,011(2); 675,2(8); 94,4(16).
Перевод чисел из одной системы счисления в другую
Для перевода чисел с одной системы счисления в другую, проще всего сначала перевести число в десятичную систему счисления, а затем, из десятичной системы счисления перевести в требуемую систему счисления.
Перевод чисел из любой системы счисления в десятичную систему счисления
С помощью формулы (1) можно перевести числа из любой системы счисления в десятичную систему счисления.
Пример 1. Переводить число 1011101.001 из двоичной системы счисления (СС) в десятичную СС. Решение:
1·26+0·25+1·24+1·23+1·22 +0·21+1·20+0·2-1+0·2-2+1·2-3 =64+16+8+4+1+1/8=93.125
Пример 2. Переводить число 1011101.001 из восьмеричной системы счисления (СС) в десятичную СС. Решение:
Пример 3. Переводить число AB572.CDF из шестнадцатеричной системы счисления в десятичную СС. Решение:
Здесь A -заменен на 10, B — на 11, C- на 12, F — на 15.
Перевод чисел из десятичной системы счисления в другую систему счисления
Для перевода чисел из десятичной системы счисления в другую систему счисления нужно переводить отдельно целую часть числа и дробную часть числа.
Целую часть числа переводится из десятичной СС в другую систему счисления — последовательным делением целой части числа на основание системы счисления (для двоичной СС — на 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 0 2 1 0
Рис. 1
Как видно из Рис. 1, число 159 при делении на 2 дает частное 79 и остаток 1. Далее число 79 при делении на 2 дает частное 39 и остаток 1 и т.д. В результате построив число из остатков деления (справа налево) получим число в двоичной СС: 10011111. Следовательно можно записать:
15910=100111112.
Пример 5. Переведем число 615 из десятичной СС в восьмеричную СС.
615 8 608 76 8 7 72 9 8 4 8 1 1
Рис. 2
При приведении числа из десятичной СС в восьмеричную СС, нужно последовательно делить число на 8, пока не получится целый остаток меньшее, чем 8. В результате построив число из остатков деления (справа налево) получим число в восьмеричной СС: 1147(см. Рис. 2). Следовательно можно записать:
61510=11478.
Пример 6. Переведем число 19673 из десятичной системы счисления в шестнадцатеричную СС.
19763 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 0.428 x 2 0 0.856 x 2 1 0.712 x 2 1 0.424 x 2 0 0.848 x 2 1 0.696 x 2 1 0.392
Рис. 4
Как видно из Рис.4, число 0.214 последовательно умножается на 2. Если в результате умножения получится число с целой частью, отличное от нуля, то целая часть записывается отдельно (слева от числа), а число записывается с нулевой целой частью. Если же при умножении получиться число с нулевой целой частью, то слева от нее записывается нуль. Процесс умножения продолжается до тех пор, пока в дробной части не получится чистый нуль или же не получим требуемое количество разрядов. Записывая жирные числа (Рис.4) сверху вниз получим требуемое число в двоичной системе счисления: 0.0011011.
Следовательно можно записать:
0.21410=0.00110112.
Пример 8. Переведем число 0.125 из десятичной системы счисления в двоичную СС.
0.125 x 2 0 0.25 x 2 0 0.5 x 2 1 0.0
Рис. 5
Для приведения числа 0.125 из десятичной СС в двоичную, данное число последовательно умножается на 2. В третьем этапе получилось 0. Следовательно, получился следующий результат:
0.12510=0.0012.
Пример 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. Следовательно имеем:
0.21410=0.36C8B416.
Пример 10. Переведем число 0.512 из десятичной системы счисления в восьмеричную СС.
0.512 x 8 4 0.096 x 8 0 0.768 x 8 6 0.144 x 8 1 0.152 x 8 1 0.216 x 8 1 0.728
Рис. 7
Получили:
0.51210=0.4061118.
Пример 11. Переведем число 159.125 из десятичной системы счисления в двоичную СС. Для этого переведем отдельно целую часть числа (Пример 4) и дробную часть числа (Пример 8). Далее объединяя эти результаты получим:
159.12510=10011111.0012.
Пример 12. Переведем число 19673.214 из десятичной системы счисления в шестнадцатеричную СС. Для этого переведем отдельно целую часть числа (Пример 6) и дробную часть числа (Пример 9). Далее объединяя эти результаты получим:
19673.21410=4CD9.36C8B416.
преобразований
преобразованийПринципы CS
Это упражнение знакомит с концепцией, на которой построено абстракций. двоичные последовательности могут использоваться для представления всех цифровых данных . Он также знакомит с концепцией алгоритма . Это фокусируется на следующих целях обучения:- 5б. Объяснение того, как системы счисления, включая двоичные и десятичные, используются для рассуждений о цифровых данных.
- 16а. Использование естественного языка, псевдокода, визуального или текстового языка программирования для выражения алгоритма.
Вступление
Предполагается, что вы выполнили домашнее задание по двоичному и шестнадцатеричные системы счисления. Эта домашняя работа описывала, как работают двоичные, десятичные и шестнадцатеричные системы счисления и показали, как конвертировать из одной системы счисления в другую.
В этом уроке мы хотим обобщить то, что мы узнали, увидев эти системы счисления как конкретные примеры более общей концепции, позиционная система счисления .
Мы разработаем алгоритмов , которые позволят вам выполнять преобразования из одной системы счисления в другую.
Тип обобщения, который мы делаем в этом уроке, — это еще один пример принципа абстракции в информатике — здесь мы сосредотачиваемся на общей схеме, которая верна для всех позиционные системы счисления.
Алгоритмы и псевдокод
Алгоритм
представляет собой пошаговую процедуру для выполнения некоторых вычислений.Например,
шаги, которые вы выполняете в приложении Hello Purr , когда кнопка
clicked — это пример простого двухэтапного алгоритма:
Чтобы помочь нам рассказать об алгоритмах, мы будем использовать псевдокод, язык или обозначение, которые имеют многие структуры язык программирования, но его легко читать. Псевдокоды на полпути между естественными языками, такими как английский, и формальным программированием языков.
Позиционные системы счисления
Давайте рассмотрим некоторые ключевые моменты, которые вы усвоили в книге Хан Видео Академии.
- Наша десятичная система счисления (а также двоичная и шестнадцатеричная систем) являются частными примерами более общей концепции позиционный система счисления.
- В позиционной системе счисления один и тот же символ может обозначать разные значения в зависимости от позиции (или позиции ) в цифра. Например, в 91 9 представляет 90 (10-е место). но в 19 он представляет собой 9 (первое место). Сравните это с тем, как символы работают в непозиционной системе, например римские цифры, где X всегда представляет 10.
- Основание числовой системы представляет собой количество
символы, которые он имеет:
Имя База Символы Десятичное 10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Двоичное 2 0 , 1 Шестнадцатеричный 16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Восьмеричный 8 0, 1, 2, 3, 4, 5, 6, 7 - В позиционных системах счисления используется возведение в степень от до
определить значение символа в зависимости от его места.Мы можем использовать это
идея перевести из любой системы в десятичную:
Система База Значение Формула преобразования Десятичное значение Десятичное 10 104 (1 × 10 2 ) + (0 × 10 1 ) + ( 4 × 10 0 ) 100 + 0 + 4 = 104 Двоичный 2 111 (1 × 2 2 ) + (1 × 2 1 ) + (1 × 2 0 ) 4 + 2 + 1 = 7 Восьмеричное 8 104 (1 × 8 2 ) + (0 × 8 1 ) + (4 × 8 0 ) 64 + 0 + 4 = 68 Шестнадцатеричный 16 FEC (F × 16 2 ) + (E × 16 1 ) + (C × 8 0 ) 15 × 256 + 14 × 16 + 12 × 1 = 3840 + 224 + 12 = 4076
Алгоритмы преобразования
Давайте резюмируем эти формулы преобразования, развивая общий алгоритм, который преобразует любую систему счисления в десятичную.
Алгоритм преобразования любой базы в десятичную систему счисления
- Пусть n будет количеством цифр в номере. Например, 104 состоит из 3 цифр, поэтому n = 3 .
- Пусть b будет основанием числа. Например, 104 является десятичным, поэтому b = 10 .
- Пусть s будет промежуточным итогом, изначально 0.
- Для каждой цифры в номере, работая слева направо, выполните:
Вычтем 1 из n .
Умножьте цифру на b n и прибавьте к s . - Когда вы закончите со всеми цифрами в номере, его десятичное значение будет s
Попробуем на двоичном числе 1011.
Пусть n = 4. Пусть b = 2. Пусть s = 0. Первая цифра, 1: n = 3, 1 × b n равно 1 × 2 3 = 8. Итак, s = 8. Вторая цифра, 0: n = 2, 0 × b n равно 0 × 2 2 = 0. Итак, s = 8. Третья цифра, 1: n = 1, 1 × b n равно 1 × 2 1 = 2. Итак, s = 10. Последняя цифра, 1: n = 0, 1 × b n равно 1 × 2 0 = 1.Итак, 1011 2 = 11 10
Цифра n Значение = Цифра * b n Промежуточная сумма 1 3 1 × 2 3 = 8 8 0 0 × 2 2 = 0 8 1 1 1 × 2 1 = 2 10 1 0 = 1 11
Попробуем на шестнадцатеричном числе 7E.
Пусть n = 2. Пусть b = 16. Пусть s = 0. Первая цифра, 7: n = 1, 7 × b n равно 7 × 16 1 = 7 × 16 = 112. Итак, s = 112. Последняя цифра, E: n = 0, 14 × b n равно 14 × 16 0 = 14. Таким образом, s = 112 + 14 = 126. Итак, 7E 16 = 126 10
Цифра n Значение = Цифра * b n Текущий итог 7 1 7 × 16 1 = 112 114 E E 14 × 16 0 = 14 126
Попробуем на восьмеричном числе 124.
Пусть n = 3. Пусть b = 8. Пусть s = 0. Первая цифра, 1: n = 2, 1 × b n равно 1 × 8 2 = 1 × 64 = 64. Итак, s = 64. Вторая цифра, 2: n = 1, 2 × b n равно 2 × 8 1 = 2 × 8 = 16. Итак, s = 64 + 16 = 80. Последняя цифра, 4: n = 0, 4 × b n равно 4 × 8 0 = 4. Итак, s = 80 + 4 = 84. Итак, 124 8 = 84 10
Цифра n Значение = Цифра * b n Текущий итог 1 2 1 × 8 2 = 64 64 1 2 × 8 1 = 16 80 4 0 4 × 8 0 = 4 84
Алгоритм преобразования десятичного числа в другое основание
- Пусть n будет десятичным числом.
- Пусть m будет числом, изначально пустым, в которое мы конвертируем. Мы будем составлять его справа налево.
- Пусть b будет основанием числа, в которое мы конвертируем.
- Повторяйте, пока n не станет 0
Разделите n на b , пусть результат будет d , а остаток будет r .
Запишите остаток r как крайнюю левую цифру из b .
Пусть d будет новым значением n .
Воспользуемся алгоритмом для преобразования 45 в двоичную форму.
Пусть n = 45. Пусть b = 2. Повторить 45, деленное на b, составляет 45/2 = 22, остаток 1. Итак, d = 22 и r = 1 . Итак, m = 1 , а новый n равен 22. 22, деленное на b, составляет 22/2 = 11, остаток 0. Итак, d = 11 и r = 1 . Итак, m = 01 , а новый n - 11. 11, разделенное на b, равно 11/2 = 5, остаток 1.Итак, d = 5 и r = 1 . Итак, m = 101 , а новый n равен 5. Деление 5 на b дает 5/2 = 2 остатка 1. Итак, d = 2 и r = 1 . Итак, m = 1101 , а новый n равен 2. 2, деленное на b, составляет 2/2 = 1 остаток 0. Итак, d = 1 и r = 0 . Итак, m = 01101 , а новый n равен 1. 1, деленная на b, составляет 1/2 = 0, остаток 1. Итак, d = 0 и r = 1 . Итак, m = 101101 , а новый n равен 0.Итак, 45 10 = 101101 2
Давайте воспользуемся им для преобразования 99 в двоичный код.
Пусть n = 99. Пусть b = 2. Повторить 99 деленное на b дает 99/2 = 49 остаток 1. Таким образом, d = 49 и r = 1 . Итак, m = 1 , а новый n - 49. 49, деленное на b, составляет 49/2 = 24 остатка 1. Таким образом, d = 24 и r = 1 . Итак, m = 11 , а новый n равен 24. 24 делить на b равно 24/2 = 12, остаток 0.Итак, d = 12 и r = 0 . Итак, m = 011 , а новый n - 12. 12, деленное на b, составляет 12/2 = 6, остаток 0. Итак, d = 6 и r = 0 . Итак, m = 0011 , а новый n равен 6. 6, деленное на b, составляет 6/2 = 3 остатка 0. Итак, d = 3 и r = 0 . Итак, m = 00011 , а новый n равен 3. 3, деленное на b, составляет 3/2 = 1 остаток 1. Таким образом, d = 1 и r = 1 . Итак, m = 100011 и новый n равен 1.1, деленная на b, составляет 1/2 = 0, остаток 1. Таким образом, d = 0 и r = 1 . Таким образом, m = 1100011 и новый n равен 0. Итак, 99 10 = 1100011 2
Давайте воспользуемся им для преобразования 45 в шестнадцатеричное.
Пусть n = 45. Пусть b = 16. Повторить 45, деленное на b, составляет 45/16 = 2 остатка 13. Итак, d = 2 и r = 13 . Итак, m = D , а новый n равен 2. 2, деленное на b, равно 2/16 = 0, остаток 2.Итак, d = 0 и r = 2 . Итак, m = 2D , а новый n равен 0. Итак, 45 10 = 2D 16 .
Давайте воспользуемся им для преобразования 99 в шестнадцатеричное.
Пусть n = 99. Пусть b = 16. Повторить 99 деленное на b дает 99/16 = 6 остаток 3. Итак, d = 6 и r = 3 . Итак, m = 3 , а новый n равен 6. 6, деленное на b, составляет 6/16 = 0 остаток 6. Итак, d = 0 и r = 6 .Итак, m = 63 , а новое значение n равно 0. Итак, 99 10 равно 63 16 .
Упражнения в классе
- Преобразуйте следующие числа в десятичную систему.
- Двоичное число 111.
- Двоичное число 1011.
- Двоичное число 1011 1011.
- Шестнадцатеричное число 61.
- Шестнадцатеричное число DA.
- Шестнадцатеричное число FEE.
- Преобразуйте следующие десятичные числа, как указано.
- Преобразует десятичное число 12 в двоичное.
- Преобразовать десятичное число 44 в двоичное.
- Преобразование десятичного числа 254 в шестнадцатеричное.
- Преобразование десятичного числа 16 в шестнадцатеричное.
- Задача: преобразовать десятичное 125 в восьмеричное (с основанием 8).
Перенести номера из одной системы счисления в любую другую онлайн
Этот перевод возможен двумя способами: прямой перевод и с использованием десятичной системы.
сначала сделаем прямой перевод.
давайте сделаем прямой перевод из шестнадцатеричного в двоичный, например:
A1 16 = A 1 = A (= 1010) 1 (= 0001) = 10100001 2
Окончательный ответ: A1 16 = 10100001 2
Теперь сделаем перевод в десятичной системе счисления.
переведем в десятичную форму так:
10 ∙ 16 1 + 1 ∙ 16 0 = 10 ∙ 16 + 1 ∙ 1 = 160 + 1 = 161 10
получил It: A1 16 = 161 10
Переведите число 161 10 в двоичную систему, как это:
Целая часть числа делится на основание новой системы счисления:
161 | 2 | ||||||||||||
-160 | 80 | 2 | |||||||||||
1 | -80 | 5 | 40 | 40 | 2-40 | 20 | 2 | ||||||
0 | -20 | 10 | 2 | 0 | -10 | 5 | 2 | ||||||
0 | -4 | 2 | 7 | 7-2 | 1 | ||||||||
0 | |||||||||||||
251009, результат преобразования был:
Окончательный ответ: A1 16 = 10100001 2
Преобразование числовой системы — объяснение
Преобразование числовой системы — объяснение Преобразование между различными системами счисленияПозиционные системы счисления
Наша десятичная система счисления известна как позиционная система счисления и . потому что значение числа зависит от положения цифр.Например, число 123 имеет совсем другое значение, чем число номер 321 , хотя в обоих номерах используются одни и те же цифры.(Хотя мы привыкли к нашей десятичной системе счисления, которая является позиционной, другие древние системы счисления, такие как египетская система счисления, не были позиционный, но вместо этого использовалось много дополнительных символов для обозначения более крупных значения.)
В позиционной системе счисления значение каждой цифры определяется в каком месте он появляется в полном номере.Наименьшее значение разряда крайняя правая позиция, и каждая последующая позиция слева имеет более высокая позиция.
В нашей десятичной системе счисления крайняя правая позиция представляет столбец «единицы», следующая позиция представляет столбец «десятки», следующая позиция представляет собой «сотни» и т. д. Следовательно, число 123 представляет 1 сот 2 десятков и 3 единиц, а число 321 представляет 3 сотен и 2 десятков и 1 один. 0)
Тот же принцип применяется к любой системе счисления.0)
Преобразование десятичной системы в другую систему счисления
Чтобы преобразовать десятичное число в его представление в другом система счисления, мы должны иметь возможность выражать число в степенях другой базы.0)Один из способов сделать это — несколько раз разделить десятичное число на основание, в которое он должен быть преобразован, пока частное не станет равным нулю. В виде число делится, остатки — в обратном порядке — образуют цифры числа в другой базе.
Пример: Преобразование десятичного числа 82 в основание 6:
82/6 | = | 13 | остаток 4 |
13/6 | = | 2 | остаток 1 |
2/6 | = | 0 | остаток 2 |
Ответ формируется путем взятия остатков в обратном порядке: 2 1 4 по основанию 6
Как написать калькулятор систем счисления на Python | Мартин Андерссон Оберже
Этот калькулятор основан на математике (разве не все?).Возможно, нам потребуется освежить нашу память о теории преобразования между основами (или узнать что-то новое).
Если вы учили математику в школе или изучали компьютеры на любом уровне, скорее всего, вы перешли из одной системы счисления в другую. . Вы могли вспомнить двоичную таблицу или говорить о « в десятичной системе » , « в восьмеричной системе » и « в шестнадцатеричной системе» .
Десятичная система (Base-10) — это та система, которую мы используем ежедневно при подсчете.0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Когда у нас заканчиваются числа, мы добавляем еще одну позицию слева → 10, 11, 12, 13, 14, 15, 16, 17 , 18, 19, 20, 21… и т.д. Когда у нас снова заканчиваются номера, мы добавляем новую позицию → 100, 101, 102… 118, 119, 120.
Да, да… Я помню начальную школу….
Мы не думаем об этом, потому что узнаем это в 2–3 года. Скажите ребенку, чтобы он считал по восьмеричной системе (Base-8), и он, скорее всего, посмотрит на вас несколько секунд, прежде чем вернуться к своей домашней работе на своем iPad.Теория проста и идентична десятичной системе счисления, просто мы к ней не привыкли.
Счет в восьмеричной системе будет выглядеть так:
0,1,2,3,4,5,6,7 → 10,11,12,13,14,15,16,17 → 20,21…
Первое преобразование, на которое мы должны обратить внимание, — это переход от любой системы счисления (Base-N) к десятичной системе (Base-10). Преобразовать десятичную систему счисления в любую другую систему очень легко. Поэтому важно знать, как перейти к десятичной системе счисления.
Если мы продолжаем использовать в десятичной системе счисления и в восьмеричной системе счисления в качестве примеров, мы можем преобразовать число в восьмеричной системе в его эквивалент в десятичной системе .Выберем случайное число.
256 (Base-8) → ??? (Base-10)
(обещаю, 256 было на самом деле случайным)
- У нас есть три позиции 2 (сотни), 5 (десятки) и 6 (единицы). Эти позиции могут занимать от 0 до 7 (8 цифр), как вы помните из вступления. position)).Если мы начнем с наименьшего числа вправо, мы умножим 6 на 8⁰, 5 на 8¹ и 2 на 8².
Вот иллюстрация, которая значительно упростит понимание:
переход от основания 8 256 к основанию 10 174Когда у нас есть число в десятичной системе (Base-10), действительно легко перейти к любая система. Давайте вернемся от 174 (База-10) к 256 (База-8).
Мы находим число в другой базе, деля его с основанием, и сохраняем остаток. Остальные составят для нас число в другой базе.Когда у нас есть остатки, мы читаем число от наименее значимого числа к наиболее значимому, то есть снизу вверх. Вот и ваш новый номер представлен в вашей новой базе!
174/2 дает 21,75. Обратите внимание на то, что 21 — красный, а 0,75 — зеленый. Отправляем 21 на следующую строку и разбираемся с 0,75. Если мы умножим 0,75 на основание, у нас останется остаток (это число, которое мы ищем). Этот номер отправляется в крайнее правое положение синим цветом.
Когда мы дойдем до 0, мы официально закончим и можем упаковать чемоданы с красивым номером на нашей новой базе.
идет от Base-10 174 к Base-8 256Это не только означает, что мы можем перейти от Base-10 к Base-8 и наоборот. Мы можем перейти от Base-X к Base-Y. Любая база, которую мы хотим.
Кажется, что-то вроде этого:
Фото Марчина Дампка из PexelsЕсли вы все еще не уверены, как это работает, я предлагаю проверить «Репетитор по органической химии». Его видео — лучшее, что я знаю по этой теме:
Пора погрузиться в код!
Примечание. Большую часть времени я занимаюсь программированием вручную.Это означает, что я не использую слишком много библиотек, потому что хочу узнать как можно больше. В этом коде я, do , использую стандартные функции Python, такие как
bin ()
, потому что я хочу показать вам, что это возможно, но вместо использованияhex ()
, я думаю, было интереснее вручную кодировать те же функции. В производственной среде вы, вероятно, захотите сделать ее краткой и использовать библиотеки, которые решают ваши проблемы, вместо того, чтобы кодировать все с нуляЭта программа — всего лишь одна основная
.py
со всем кодом в одном документе. Если хотите, можете продлить это как хотите. Числовой класс? Конечно, почему бы и нет. GUI? Также мы должны кое-что изучить.Я рекомендую работать с калькулятором базового преобразователя онлайн во время кодирования, чтобы дважды проверить, что ваш код выводит правильные значения.
Вот суть:
полный код.Логика кода заключается в том, что мы передаем три аргумента функции
convert_number_system ():
-
input_number
— это число, которое мы хотим преобразовать. -
input_base
— это база, из которой мы хотим выполнить преобразование. -
output_base
— это база, в которую мы хотим преобразовать.
Я раньше не использовал многострочную строку для печати меню, но было бы разумно создать подобное меню.
Функция возвращает всю строку меню, поэтому мы можем использовать ее где угодно. Нам также не нужно беспокоиться о новой строке.
возврат (
''
----------------------------------------- -----------------
Добро пожаловать в конвертер числовой базы!
Система запросит у вас:
- Число для конвертации
- Какую базу вы хотите конвертировать из
- Какую базу вы хотите преобразовать В ** ПОМНИТЕ: все числа должны быть целыми! (Кроме HEX) **
-------------------------- --------------------------------
'' ')Вместо проверки пользовательского ввода в функции преобразователя, Я хотел создать валидаторы как функции.Делая это, мы создаем код, который можно использовать повторно.
def validate_bin (check_number):
Эта функция просто проверяет, является ли число действительным двоичным числом.
Мы не хотим проверять длинную строку с несколькими вхождениями одного и того же числа. Если мы конвертируем его в набор, мы удаляем дубликаты. Наборы не могут содержать несколько экземпляров элемента. Мы используем понимание списка, чтобы преобразовать ввод в int и проверить его на соответствие [0,1]
[int (item) для элемента в наборе (list (check_number))]
Я решил передавать строки из взаимодействия с пользователем и при необходимости создавать целые числа ввода.
int (item)
проверяет, что все числа являются целыми числами (при желании мы могли бы также сравнить строку со строкой (‘0’, ‘1’
)).Вот как это будет выглядеть за кадром:
'10010011'
→['1', '0', '0', '1', '0', '0', '1', '1']
→[0,1]
если 0 находится в [0,1], он проверяет штраф, если 1 находится в [0,1], это также проверяет штраф. Если бы у вас было число, например 23, обе цифры не сработали бы, и функция вернула бы
False
def validate_input (check_number):
Здесь ничего особенного … Код проверяет, содержит ли ввод определенные допустимые символы.Мы работаем с числами
0–9
и, поскольку мы поддерживаем HEX, мы также включаемa-f
в качестве действительных входных данных.def validator (input_number, input_base, output_base):
Эта функция использует другие валидаторы и проверяет все входные данные, чтобы мы знали, есть ли смысл в продолжении преобразования.
- Сначала он проверяет, ввели ли мы число или шестнадцатеричное значение.
- Затем проверяем базы. Если input_base равно 2, мы преобразуем двоичное число.Следовательно, input_number должен быть только цифрами, и если это так, то он должен быть 0 или 1.
- Если введены и цифры, и буквы, это шестнадцатеричное число. Если input_base НЕ 16, мы не сможем его преобразовать. HEX — это Base-16, и любая другая база будет вычисляться неправильно. Мы могли бы рассмотреть возможность создания предварительно заполненной базы ввода во время взаимодействия, когда кто-то вводит шестнадцатеричное число.
- Наконец, мы проверяем, пытается ли пользователь преобразовать в Base-1 или из него. Это невозможно, поэтому вместо сбоя программы мы хотим вернуть ошибку.
Простая математика, лежащая в основе алгоритмов десятично-двоичного преобразования
Если вы поищете в Интернете «Как преобразовать десятичное в двоичное», вы найдете четыре простых алгоритма: два для целых чисел и два для дробей. Они представлены с примерами ниже, в первой части статьи. Но, хотя почти всегда достаточно простого знания алгоритмов, я решил попытаться понять, почему они работают. Во второй части этой статьи объясняется самая простая математика, лежащая в основе каждого из них.Знание этого может помочь вам запомнить любой из алгоритмов, если вы внезапно их забудете. Я настоятельно рекомендую вам взять блокнот и ручку и выполнять операции вместе со мной, чтобы лучше запомнить математику. Вот четыре алгоритма с примерами, которые вы можете найти в Интернете.
Преобразование десятичного целого числа в двоичное
Чтобы преобразовать целое число в двоичное, начните с рассматриваемого целого числа и разделите его на 2, обращая внимание на частное и остаток. Продолжайте делить частное на 2, пока частное не будет равно нулю.Затем просто выпишите остатки в обратном порядке.
Вот пример такого преобразования с использованием целого числа 12.
Сначала разделим число на два, указав частное и остаток:Теперь нам просто нужно выписать остаток в обратном порядке — 1100 . Итак, 12 в десятичной системе представляется как 1100 в двоичной системе.
Преобразование десятичной дроби в двоичную
Чтобы преобразовать дробь в двоичную, начните с рассматриваемой дроби и умножьте ее на 2 , обращая внимание на результирующую целую и дробную часть.Продолжайте умножать на 2, пока не получите дробную часть, равную нулю. Затем просто выпишите целые части из результатов каждого умножения.
Вот пример такого преобразования с использованием дроби 0,375 .
Теперь давайте просто выпишем полученную целую часть на каждом шаге — 0,011 . Итак, 0,375 в десятичной системе представляется как 0,011 в двоичной системе.
Преобразование двоичного целого числа в десятичное
Чтобы преобразовать двоичное целое число в десятичное, начните слева. Возьмите текущую сумму, умножьте ее на два и сложите текущую цифру. Продолжайте до тех пор, пока не кончатся цифры. Вот пример такого преобразования с использованием дроби 1011 .
Преобразование целой дроби в десятичную
Чтобы преобразовать двоичную дробь в десятичную, начните справа с суммы 0. Возьмите текущую сумму, сложите текущую цифру и разделите результат на 2.Продолжайте, пока не закончатся цифры. Вот пример такого преобразования с использованием дроби 0,1011 . Я просто заменил деление на 2 умножением на 1/2 .
Вот вам 4 простых алгоритма, которые позволят вам преобразовать двоичные числа в десятичные и обратно.
Расширение Base-q числа
Ключом к пониманию того, почему эти алгоритмы работают, является расширение
base-q
числа.Целое число в любой системе счисления может быть представлено в следующей форме:где
- N — целое число
- x — это цифра (от 0 до 9 для системы с основанием 10). , 0 и 1 для системы base-2)
- q — базовое значение (10 для системы base-10, 2 для системы base-2 )
В этой статье эта форма упоминается как
основание q расширение числа N
, или простооснование q расширение
. Давайте посмотрим, как это выглядит для числа 12 в десятичной и двоичной системе:Точно так же дробное число в любой системе счисления может быть представлено в следующей форме:
где,
- N — дробная часть
- x — цифра (от 0 до 9 для системы с основанием 10, 0 и 1 для системы с основанием 2)
- q — базовое значение (10 для системы base-10, 2 для системы base-2)
Для номера 0.375 в десятичной и двоичной системах представление выглядит следующим образом:
Преобразование десятичного целого в двоичное
Как оказалось, мы можем использовать эту форму расширения base-q для преобразования числа из десятичной системы в двоичную. . Сделаем это для того же номера 12 . Во-первых, представим, что мы не знаем, как это представлено в двоичном коде, и запишем его, заменив неизвестные цифры на x :
Наша задача — найти все x .Давайте посмотрим, что мы можем здесь сделать. Первое, на что мы должны обратить внимание, это то, что все слагаемые, кроме последнего, будут четными числами, потому что все они кратны двум. Теперь, используя эту информацию, мы можем вывести цифру для x0 — , если преобразуемое целое число четное, то x0 равно , если нечетное — то x0 должно быть 1 .Здесь число 12 четное, поэтому x0 равно нулю. Запишем эту информацию:
Затем нам нужно найти значение для x1 . Поскольку все слагаемые от x1 до xN являются кратными двум, мы можем вычесть 2 , чтобы выделить
1 Давайте сделаем это:
00Также легко увидеть, что сумма значений в скобках равна 6 . Итак, мы можем записать наш первый шаг как:
Давайте продолжим выяснять оставшиеся x . Мы можем записать полином внутри скобок как отдельный оператор:
Здесь, применив ту же логику, что и выше, мы видим, что x1 равно 0 .Давайте перепишем его и снова вычтем 2:
Итак, наш второй шаг:
Теперь мы можем увидеть шаблон. Мы можем продолжать разложить на множители 2 до тех пор, пока частное не станет равным нулю. Давайте проследим эту схему и посмотрим, что у нас получится.
Поскольку частное равно 1, осталось только одно слагаемое, поэтому давайте перепишем предыдущее выражение:
Итак, наш третий шаг:
Итак, мы получаем следующее:
Понятно, что x3 равно 1 .Но, поскольку для нашего алгоритма нам нужно частное, давайте перепишем предыдущее выражение так, чтобы оно имело частное:
Поскольку в итоге мы получаем частное 0 , работать больше не с чем, и это был наш последний шаг. Запишем:
Итак, преобразование закончено. Вот как выглядит наше преобразование по шагам:
Теперь ясно, что остаток на каждом шаге соответствует значению x в соответствующих позициях: первый остаток соответствует первому x, второй остаток второму х и так далее.Таким образом, число 12 в двоичном формате с использованием описанного выше алгоритма представляется как 1100 .
Помните, что мы начали с идеи показать, почему работает алгоритм, который включает погружение на 2 . Давайте предпримем шаги, описанные выше, и переместим 2 в левую часть выражений:
Таким образом, вы можете увидеть, как мы пришли к алгоритму, описанному в начале.Мы также можем поместить вычисления для этих четырех шагов в одно представление, например, это
Убедитесь, что вы понимаете, как мы достигаем этого представления, поскольку оно нам понадобится при изучении того, как работает алгоритм преобразования из двоичного в десятичное.
Преобразование десятичной дроби в двоичную
Чтобы показать, почему мы умножаем на 2 и берем целую часть при преобразовании дробей в двоичную, я также буду использовать форму расширения base-q для дробей. Я собираюсь использовать дробное число 0.375 из первой части статьи. Как и в случае с целой частью, давайте представим, что мы не знаем, как это число представлено в двоичном формате, и запишем его, заменив неизвестные цифры на x :
Как и в случае с целыми числами, наша задача — найти все x , выделив x . Посмотрим, как мы можем это сделать. Первое, на что следует обратить внимание, это то, что отрицательная степень двойки дает нам дроби со знаминателем 2 с положительной степенью.Давайте перепишем приведенное выше выражение:
Сразу очевидно, что мы можем просто вынести 1/2 в правой части выражения. Давайте сделаем это:
, и затем мы можем переместить 1/2 в левую часть
Хорошо, здесь мы выделили x1 , и мы знаем, что это может быть либо 1 или 0 . Чтобы определить, какая у него цифра, давайте взглянем на оставшиеся слагаемые:
Давайте подумаем, насколько большой может быть сумма этих чисел.Если максимальное количество цифр x равно 1, то мы можем просто заменить x на единицы и записать сумму как:
Ну, это геометрическая последовательность дробей, и сумма такой ряд лежит в границах [0
Теперь должно быть ясно, что если правая часть меньше чем 1, то x1 не может быть равно 1 , поэтому оно равно 0 , а оставшаяся часть равна 0.75 .
Это выглядит именно так, как первый шаг в алгоритме, представленном в начале:
Давайте вычленим дробную часть 0,75 и вычленим еще 1/2 , чтобы выделить x2 :
и переместите 1/2 влево:
Теперь, если x2 равно 0 , тогда сумма левой части выражения не может быть больше чем 1 , но левая сторона — 1.5 , поэтому x1 должно быть 1 , а оставшаяся часть 0,5 . Запишем это:
Опять же, это следует схеме в алгоритме, представленном в начале:
Давайте повторим те же действия для оставшейся дробной части 0,5 .
Используя ту же логику, что и выше, мы можем увидеть, что x3 равно 1 и нет оставшейся дробной части:
Поскольку оставшаяся дробная часть равна 0, это Вот как выглядит наш последний шаг:
Итак, давайте снова выпишем все шаги:
Это именно тот алгоритм, который я представил в начале.Как и в случае с целыми числами, мы также можем поместить вычисления для этих трех шагов в одно представление, например:
Опять же, важно, чтобы вы полностью усвоили это представление, поскольку оно нам понадобится при изучении преобразования двоичного в десятичное.
Почему не все дроби могут быть конечным образом представлены в двоичной системе
Тот факт, что некоторые дроби, представленные конечным числом в десятичной системе, не могут быть представлены конечным числом в двоичной системе, является неожиданностью для многих разработчиков.Но именно эта путаница лежит в основе, казалось бы, странного результата добавления 0,1 к 0,2. Так что же определяет, может ли дробь быть конечным образом представлена в числовой системе? Итак, для того, чтобы число было представлено конечным числом, знаменатель дроби должен быть степенью основания системы. Например, для системы с основанием 10 знаменатель должен быть степенью 10, поэтому мы можем конечным образом представить 0,625 в десятичной системе:
и не можем конечным образом представить 1/3:
То же самое и с основанием. 2 система:
Но если мы проверим 0.1 знаменатель равен 10, а это не степень двойки, поэтому 0,1 будет бесконечной дробью в двоичной системе. Давайте посмотрим на это, используя алгоритм, который мы узнали выше:
Мы можем продолжать делать это бесконечно, но давайте запишем его как периодическую непрерывную дробь:
Преобразование двоичного целого числа в десятичное
Я собираюсь использовать то же двоичное целое число 1011 из первого раздела, чтобы показать вам, почему работает алгоритм умножения на 2. Здесь мы также будем использовать форму расширения base-q числа.Запишем это в следующей форме:
Поскольку все слагаемые кратны 2 , мы можем продолжать вычитать 2 до тех пор, пока частное не станет равным нулю. Давайте сделаем это:
Теперь, если вы просто следуете порядку математических операций, вы получите точно такие же шаги, которые я показал в начале, а именно:
Таким образом 1011 в двоичном формате 11 в десятичной системе счисления.
Преобразование двоичной дроби в десятичную
Теперь мы подошли к последнему алгоритму.Наверное, вы уже разобрались в механике этого. Если нет, то давайте посмотрим, почему это работает. Форма расширения base-q числа также является ключевым моментом. Возьмем номер 0,1011 из первого раздела. Давайте запишем это в развернутой форме:
Опять же, поскольку все слагаемые кратны 1/2 , мы можем продолжать вычитать 1/2 до тех пор, пока не останется дробная часть.Давайте сделаем это:
Следуя порядку математических операций, вы получите алгоритм, описанный в начале:
Таким образом, 0,1011 в двоичном формате будет 0,6875 в десятичном.
Преобразование типа данных в Python — Преобразование и приведение десятичного числа в двоичное, числа с плавающей запятой в целое, целого числа в двоичное
Каждое значение в Python имеет тип данных. Типы данных — это классификация данных, которая сообщает компилятору или интерпретатору, как вы хотите использовать данные.Тип определяет операции, которые могут быть выполнены с данными, и структуру, в которой вы хотите хранить данные. В науке о данных вам часто потребуется изменить тип данных, чтобы их было проще использовать и работать с ними.
В этом руководстве будут рассмотрены некоторые важные и наиболее часто используемые структуры данных, и вы научитесь изменять их типы в соответствии с вашими потребностями. В частности, вы узнаете:
Python имеет много типов данных. Вы, должно быть, уже видели и работали с некоторыми из них.У вас есть целые числа и числа с плавающей запятой для работы с числовыми значениями, логическое значение (
bool
) для работы с истинными / ложными значениями и строки для работы с буквенно-цифровыми символами. Вы можете использовать списки, кортежи, словарь и наборы, которые представляют собой структуры данных, в которых вы можете хранить коллекцию значений. Чтобы узнать о них больше, обязательно ознакомьтесь с типами данных DataCamp для курса Data Science.Неявное и явное преобразование типов данных
Преобразование данных в Python может происходить двумя способами: либо вы указываете компилятору явно преобразовать тип данных в какой-либо другой тип, либо компилятор сам понимает это и делает это за вас.В первом случае вы выполняете явное преобразование типа данных, тогда как во втором вы выполняете неявное преобразование типа данных.
Неявное преобразование типов данных Python
Неявное преобразование или приведение — это когда преобразование типа данных происходит либо во время компиляции, либо во время выполнения и обрабатывается Python напрямую за вас. Давайте посмотрим на пример:
a_int = 1 b_float = 1.0 c_sum = a_int + b_float печать (c_sum) print (введите (c_sum))
2.0 <класс 'float'>
Совет : вы можете использовать функцию
type ()
в Python для проверки типа данных объекта.В этом примере значение int
a_int
было добавлено к значению с плавающей запятойb_float
, и результат был автоматически преобразован в значение с плавающей запятойc_sum
без необходимости сообщать компилятору. Это неявное преобразование данных.Почему вместо этого значение с плавающей запятой не было преобразовано в целое число?
Это связано с более широкой концепцией продвижения шрифтов в информатике.Проще говоря, это защитный механизм компилятора, который позволяет вам выполнять операции, когда это возможно, путем преобразования ваших данных в другой супертип без потери информации.
Это означает, что преобразование из числа с плавающей точкой в целое число не выполняется, потому что тогда компилятору потребуется удалить дробную часть, что приведет к потере информации.
Явное преобразование типа данных Python
Явное преобразование, также известное как приведение типа — это преобразование типа данных, которое происходит, потому что вы четко определили его в своей программе.По сути, вы заставляете выражение быть определенного типа. Общая форма явного преобразования типа данных следующая:
(обязательный_тип_данных) (выражение)
Примечание : как вы можете себе представить, при явном преобразовании типа данных существует риск потери информации, поскольку вы заставляете выражение иметь определенный тип.
Имея все это в виду, вы можете углубиться в некоторые из часто используемых явных преобразований типов данных …
Сравнение примитивных и непримитивных структур данных
Примитивные структуры данных являются строительными блоками для манипулирования данными и содержат чистые, простые значения данных.Python имеет четыре примитивных типа переменных:
- Целые числа
- Поплавок
- Струны
- логическое значение
Непримитивные структуры данных не просто хранят значение, а скорее набор значений в различных форматах. В Python у вас есть следующие непримитивные структуры данных:
- Списки
- Кортежи
- Словарь
- Наборы
Вы можете узнать о них больше с помощью DataCamp’s Data Structures in Python Tutorial
Преобразования целых чисел и чисел с плавающей запятой
Целые числа и числа с плавающей запятой — это типы данных, которые имеют дело с числами.
Чтобы преобразовать целое число в число с плавающей запятой, используйте функцию
float ()
в Python. Точно так же, если вы хотите преобразовать число с плавающей запятой в целое число, вы можете использовать функциюint ()
.a_int = 3 b_int = 2 # Явное преобразование типа из int в float c_float_sum = float (a_int + b_int) печать (c_float_sum)
5,0
a_float = 3,3 b_float = 2.0 # Явное преобразование типа из float в int c_int_sum = int (a_float + b_float) печать (c_int_sum) c_float_sum = a_float + b_float печать (c_float_sum)
5 5.3
Преобразование типа данных со строками
Строка — это набор из одного или нескольких символов (букв, цифр, символов). Вам может потребоваться довольно часто преобразовывать строки в числа или числа в строки. Узнайте, как это сделать, используя функцию
str ()
:price_cake = 15 price_cookie = 6 total = price_cake + price_cookie print ("Итого:" + всего + "$")
------------------------------------------------ --------------------------- TypeError Traceback (последний вызов последним)
в () 2 price_cookie = 6 Всего 3 = price_cake + price_cookie ----> 4 print ("Итого:" + всего + "$") TypeError: невозможно неявно преобразовать объект int в str В приведенном выше примере возникает ошибка
TypeError
, информирующая о том, что компилятор не может неявно преобразовать целочисленное значение в строку.Вам может показаться интуитивно понятным, что программа должна делать здесь. Однако компилятор не всегда может быть уверен, и поэтому он предоставляет механизм с явным приведением типов, чтобы вы могли четко указать, что вы хотите. Давайте посмотрим на тот же пример с приведением типов:
price_cake = 15 price_cookie = 6 total = price_cake + price_cookie print ("Итого:" + str (total) + "$")
На сумму: 21 $
Он работает таким же образом при преобразовании значений с плавающей запятой в строковые значения.
В Python вы также можете преобразовывать строки в целые числа и значения с плавающей запятой, когда это возможно. Посмотрим, что это значит:
price_cake = '15' price_cookie = '6' # Конкатенация строк total = price_cake + price_cookie print ("Итого:" + всего + "$") # Явное преобразование типа в целое число total = int (price_cake) + int (price_cookie) print ("Итого:" + str (total) + "$")
На сумму: 156 $ Итого: 21 $
Давайте разберем код.
price_cake
иprice_cookie
изначально являются строками. Затем вам нужно найти общую сумму, что означает, что они должны быть сначала преобразованы в соответствующие им целочисленные значения. В противном случае компилятор будет считать, что операция, которую вы хотите, представляет собой конкатенацию строк, а не числовое сложение. Затем вам нужно поместить это значение в окончательную строку отображения и, следовательно, необходимо преобразовать итоговую сумму в строку, чтобы объединить ее с остальной частью сообщения на экране.Надеюсь, этот пример поможет вам понять важность преобразования типов данных. Несмотря на то, что это очень небольшой пример преобразования типа данных, вы уже видите, насколько он может быть полезным.
Примечание : заметили ли вы «по возможности» при попытке преобразовать строку в целые числа или числа с плавающей запятой? Это связано с тем, что не всегда возможно преобразовать строки в числа и применить к ним числовые операции. Компилятор знает об этом и поэтому выдаст вам ошибку, когда вы попытаетесь это сделать.Посмотрите на пример ниже:
price_cake = 'пятнадцать' price_cookie = 'шесть' total = int (price_cake) + int (price_cookie)
------------------------------------------------ --------------------------- ValueError Traceback (последний вызов последним)
в () 1 price_cake = 'пятнадцать' 2 price_cookie = 'шесть' ----> 3 всего = int (price_cake) + int (price_cookie) ValueError: недопустимый литерал для int () с базой 10: 'пятнадцать' Преобразование типов в кортежи и списки
Так же, как с целыми числами и числами с плавающей запятой, вы также можете преобразовывать списки в кортежи и кортежи в списки.
Помните, что такое кортеж и списки? Списки и кортежи в Python используются для хранения коллекции однородных элементов. Разница между кортежами и списком заключается в том, что кортежи неизменяемы, что означает, что после определения вы не можете удалять, добавлять или редактировать любые значения внутри него.
Зачем преобразовывать списки в кортежи?
Это потому, что кортежи являются неизменяемым типом данных и позволяют существенно оптимизировать программы, которые вы создаете.
А зачем преобразовывать кортежи в списки?
Может быть, вы хотите внести изменения в исходный кортеж.Таким образом, вы можете преобразовать их в списки, а затем внести изменения, а затем преобразовать их обратно в кортежи.
Вы можете использовать функцию
tuple ()
для возврата версии кортежа переданного ей значения и аналогично функциюlist ()
для преобразования в список:a_tuple = (1,2,3,4,5,6,7,8,9,10) b_list = [1,2,3,4,5] печать (кортеж (b_list)) печать (список (набор))
(1, 2, 3, 4, 5) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Вы также можете преобразовать строку в список или кортеж.
десерт = 'Торт' # Преобразование символов в строке в отдельные элементы кортежа печать (кортеж (десерт)) # Преобразовать строку в список десерт_лист = список (десерт) Dessert_list.append ('s') печать (список_десертов)
('C', 'a', 'k', 'e') ['C', 'a', 'k', 'e', 's']
Двоичные, восьмеричные и шестнадцатеричные целые числа в Python
Системы счисления относятся к количеству символов или знаков, используемых для представления любого числового значения. Система счисления, которую вы обычно используете каждый день, называется десятичной .В десятичной системе вы используете десять различных символов: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9. С помощью этих десяти символов вы можете представить любую величину. Двоичная, шестнадцатеричная и восьмеричная относятся к разным системам счисления.
Когда у вас заканчиваются символы, вы переходите к размещению следующей цифры. В десятичной системе, чтобы представить единицу больше 9, вы используете 10, что означает одну единицу из десяти и ноль единиц. Однако в других системах счисления все по-другому. Например, если вы рассматриваете двоичную систему, в которой используются только два символа: 0 и 1, когда у вас заканчиваются символы, вам нужно перейти к размещению следующей цифры.Вот как вы будете считать в двоичном формате: 0, 1, 10, 11, 100, 101 и так далее.
Давайте рассмотрим некоторые системы счисления более подробно в следующих разделах.
преобразовать в двоичное число
Двоичные целые числа — это число, представленное с основанием два. Это означает, что в двоичной системе счисления для представления чисел используются только два символа: 0 и 1. Когда вы отсчитываете от нуля в двоичной системе счисления, символы заканчиваются быстрее: 0, 1, ???
Кроме того, больше не осталось символов.0)) = 79
В Python вы можете просто использовать функцию
bin ()
для преобразования десятичного значения в соответствующее ему двоичное значение.И аналогично, функция
int ()
для преобразования двоичного файла в его десятичное значение. Функцияint ()
принимает в качестве второго аргумента основание числа, которое нужно преобразовать, то есть 2 в случае двоичных чисел.а = 79 # База 2 (двоичная) bin_a = bin (а) печать (bin_a) print (int (bin_a, 2)) # База 2 (двоичный)
0b1001111 79
Преобразование в восьмеричное
Octal — это еще одна система счисления, в которой используется меньше символов, чем в традиционной десятичной системе счисления.0)) = 79
В Python вы можете использовать функцию
oct ()
для преобразования десятичного значения в соответствующее ему восьмеричное значение. В качестве альтернативы вы также можете использовать функциюint ()
вместе с правильным основанием 8 для восьмеричной системы счисления.а = 79 # База 8 (восьмеричная) oct_a = oct (а) печать (oct_a) печать (int (oct_a, 8))
0o117 79
Преобразование типа в шестнадцатеричный
Шестнадцатеричная система счисления.В отличие от двоичного и восьмеричного, шестнадцатеричный имеет шесть дополнительных символов, которые используются помимо чисел в десятичной системе счисления. 0)) = 79
В Python вы можете использовать функцию
hex ()
для преобразования десятичного значения в соответствующее шестнадцатеричное значение или функциюint ()
с основанием 16 для шестнадцатеричной системы счисления.а = 79 # База 16 (шестнадцатеричная) hex_a = шестнадцатеричный (a) печать (hex_a) печать (число (шестнадцатеричное_а, 16))
0x4f 79
Вы сделали это!
Поздравляю! Вы узнали о преобразованиях типов данных в Python в основном с помощью встроенных методов. Это определенно поможет вам работать с различными типами данных, обеспечивая большую гибкость при написании программ.
ВDataCamp есть отличный курс по промежуточному Python для науки о данных, где вы можете научиться строить данные с помощью matplotlib, работать со словарями и знаменитым DataFrame pandas.Вы также увидите, как с помощью циклов можно контролировать выполнение программы. В конце курса также есть тематическое исследование, где вы сможете применить все, что вы узнали, и применить свои знания на практике! Первая глава бесплатна, так что попробуйте!
Преобразование двоичного числа в десятичное — обзор
3.5 Карта Карно
Для двух переменных существует четыре термина, и их можно удобно разместить на «карте», как показано на рисунке 3.4. Карта состоит из квадрата, разделенного на четыре ячейки, по одной для каждого из минтермов.Возможные значения переменной A записываются в левой части карты, маркируя соответствующие строки карты, в то время как возможные значения переменной B записываются в верхней части карты, маркируя соответствующие столбцы карты. Следовательно, верхняя левая ячейка представляет minterm, где A = 0 и B = 0, то есть minterm A¯B¯. Нижняя правая ячейка представляет minterm AB , где A = 1 и В = 1.Этот вид карты называется карта Карно или K-карта.
Рисунок 3.4. Карта для двух логических переменных
Карты Карно можно пометить и пометить различными способами. Например, каждая ячейка может быть пронумерована десятичным нижним индексом термина, который занимает ячейку. В этом случае нижняя правая ячейка будет пронумерована цифрой 3, как показано на рисунке 3.5 (a). Нумерация ячеек, показанная на рисунке 3.5 (a), предполагает, что A является самым старшим битом в двоичном преобразовании в десятичное, а B — младшим значащим битом.Так как A имеет вес 2, а B имеет вес 1, это иногда обозначается сокращенно как A, B ≡ 2,1 (что составляет , а не в обычном уравнении, а просто указывает соответствующие веса A и B ). В качестве альтернативы ячейки могут быть помечены двоичным представлением их соответствующего индекса, как показано на Рисунке 3.5 (b). Еще одна возможность для меток осей — использовать A, A¯, B, B¯ вместо 0 и 1, как показано на рисунке 3.5 (в).
Рисунок 3.5. Альтернативные методы маркировки карты Карно
Для трех переменных карта содержит восемь ячеек, по одной для каждого из возможных терминов, как показано на рисунке 3.6 (a), для взвешивания A, B, C ≡ 4,2 , 1. Переменная A назначена двум строкам карты, а переменные B и C — четырем столбцам. Есть четыре комбинации этих двух переменных, и каждая комбинация назначается столбцу карты.
Рисунок 3.6. Карты Карно для трех переменных
Столбцы и строки распределяются показанным способом, так что два соседних столбца всегда связаны с истинным значением переменной или, альтернативно, с ее дополнением. Изучение рисунка 3.6 (a) показывает, что первые два столбца связаны с B ¯, второй и третий столбцы связаны с C , а третий и четвертый столбцы связаны с B. Причина распределения переменных Таким образом, столбцы станут понятнее, когда процедура минимизации булевой функции будет рассмотрена далее в этой главе.Обратите внимание, однако, что подписи столбцов в верхней части K-карты такие же, как порядок кода Грея для двух двоичных переменных (см. Раздел 1.21). Причина этого заключается в том, что основной принцип K-карты заключается в том, что при перемещении от одной ячейки к соседней ячейке по вертикали или горизонтали значение одной (и только одной ) логической переменной может измениться, и Конечно, точно так же коды Грея должны изменяться только на одну цифру на каждом шаге. Альтернативный метод маркировки осей K-карты с 3 переменными показан на рисунке 3.6 (b), из которого ясно, что два соседних столбца всегда связаны либо с истинным значением, либо с дополнением переменной.
K-карта с 4 переменными показана в двух формах, различающихся только методом маркировки осей, на рис. 3.7. Поскольку существует 16 минтермов для четырех переменных, карта содержит 16 ячеек, и каждая ячейка помечена десятичным нижним индексом соответствующего минтерма с использованием веса A, B, C, D 8, 4, 2, 1. Обратите внимание, что на рис. 3.7 (a) обе оси помечены в порядке кода Грея.
Рисунок 3.7. Карты Карно для четырех переменных
В случае пяти переменных удобно использовать две карты с 16 ячейками, а не одну карту с 32 ячейками, как показано на рисунке 3.8 (a). Правая карта соответствует истинному значению E , а левая карта связана с дополнением переменной E.
Рисунок 3.8. Карты Карно для пяти переменных с использованием весов A, B, C, D, E ≡ 16, 8, 4, 2, 1
Альтернативой является начало одной K-карты с 4 переменными и подразделение каждого оригинала. квадратную ячейку по диагонали, как показано на рисунке 3.8 (b) для создания единой карты из 32 ячеек, так что ячейки теперь становятся треугольниками; E ассоциируется с верхними левыми треугольниками, а E¯ — с нижними правыми треугольниками.
Для шести переменных существует 64 термина, поэтому требуется 64 ячейки; Возможности состоят в том, чтобы использовать четыре карты с 16 ячейками, или две карты с 32 ячейками, или одну карту с 64 ячейками, полученную путем взятия карты с 32 ячейками и повторного деления каждой исходной квадратной ячейки по диагонали для получения четырех треугольных ячеек в пространстве каждая исходная квадратная ячейка, как показано на рисунке 3.
-