Числовые системы: введение в двоичные, шестнадцатеричные и другие системы исчисления
() translation by (you can also view the original English article)
Вы когда-либо видели эти ненормальные двоичные числа и удивлялись, что они обозначают? Вы когда-нибудь видели цифры вперемешку с буквами, и задавались вопросом, что происходит? Все это и многое другое вы узнаете в этой статье. Шестнадцатеричные числа не должны вас пугать.
(Спасибо ReBoot Wiki за изображение).
Введение. Что такое система чисел?
Вы, наверное, уже знаете, что такое система чисел – или когда-либо слышали о двоичных или шестнадцатеричных числах? Проще говоря, система чисел - это способ их представления. Мы привыкли использовать систему исчисления состоящую из 10 цифр, которая называется десятичной. Другие похожие системы, включают в себя base-16 (шестнадцатеричную), base-8 (восьмеричную) и base-2 (двоичную).
В этой статье я объясню, в чем же различие между этими системами , как с ними работать, и почему знание о них поможет вам.
Наши действия
Прежде чем мы начнем, попробуем немного поразвлечься. Существует много разных способов представления цвета, но одним из наиболее распространенных является цветовая модель RGB. Использование этой модели дает нам знание о том, что каждый цвет состоит из комбинации цветов: красного, зеленого и синего.
Возможно, вам интересно, как цвета могут относятся к числовым системам. Короче говоря, на компьютере любой цвет сохраняется как определённое количество комбинаций: красного, зеленого и синего. (Мы поговорим подробнее об этом позже.) Поскольку это всего лишь число, оно может быть представлено несколькими способами и с использованием разных систем исчисления.
Ваша задача - угадать, сколько красного, зеленого и синего в цвете фонового изображения. Значения для красного, зеленого и синего могут варьировать от 0 до 255.
Используйте различные подсказки, которые помогут вам. Если вы еще не разобрались в этом, не проблема! Вы можете увидеть, как выглядит ваше предположение, используя кнопку View Guess. Сейчас это может показаться сложным, но, уверен, к концу статьи всё будет понятно.
Посмотрим на десятичную систему
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ... Вы все время считаете, использую десятичную систему. Решите быстро, сколько будет 7 + 5? Если вы ответили 12, вы используете десятичную систему. Давайте более подробно рассмотрим то, что вы делали все эти годы, даже не задумываясь об этом.
Взглянем на подсчеты. Сначала вы пересчитываете все цифры: 0, 1, 2 ... После того, как вы дошли до 9, у вас больше нет цифр для представления следующего числа. Таким образом, вы меняете его на 0 и добавляете 1 к десяткам, и получаете 10. Процесс повторяется снова и снова, и в итоге вы добираетесь до 99, где вы не можете получить большое число с двумя цифрами, поэтому вы добавьте еще один разряд, и получаете 100.
Хотя это все очень просто, вы не должны упускать из виду то, что происходит. Самая крайняя справа цифра представляет собой число единиц, следующая цифра представляет собой число десятков, следующее число сотни и т. д.
Визуализация десятичной системы счета
Сбиты с толку этими описаниями? Нет проблем - ниже приведён пример. Просто введите число в текстовое поле и нажмите кнопку. Попробуйте ввести большое число, например 2347. Вы увидите две группы чисел из тысяч, 3 группы сотен, 4 группы десятков и 7 единиц.
Десятичная система счета с математической точки зрения
Возможно, вы уже заметили, как работает этот шаблон. Давайте посмотрим, что происходит с математической точки зрения, используя пример 2347.
- Как вы видели, есть две тысячи. Не случайно
1000= 10*10*10
, что также можно записать как103
. - Здесь 3 сотни. Опять же, не случайно то, что
100 = 10*10
или102
. - Здесь 4 десятка, и
10 = 101
- Наконец, здесь 7 единиц - 1 и
1 = 100
. (Это может показаться странным, но любое число в степени 0 равно 1, по определению.)
Это, по сути, определение десятичной системы. Чтобы получить значение числа в десятичной системе, мы просто используем этот шаблон. Вот еще несколько примеров:
892 = 8*102+9*101+2*100
1147 = 1*103+1*102+4*101+7*100
53 = 5*101+3*100
Конечно, все это кажется немного глупым. Мы все знаем, какое значение приобретает число в десятичной системе, потому что мы всегда её используем, и это естественно. Как мы вскоре увидим, если мы поймем шаблоны, как работает десятичная система, мы сможем лучше понять и другие.
Восьмеричная система исчисления
Base - 8, также называемая восьмеричная. Эта система означает именно то, что мы слышим в ее названии: система основана на восьми (а не на десяти) цифрах. Помните, как в десятичной системе у нас было десять цифр? Теперь, в восьмеричной, мы ограничены только восемью цифрами: 0, 1, 2, 3, 4, 5, 6 и 7. Не существует 8 и 9.
Мы считаем как обычно, за исключением только того, что теперь у нас есть восемь цифр. Вместо подробного описания, нажмите «Count Up 1» внизу, и вы увидите, как ведется подсчет в восьмеричной системе исчисления.
Вы уже раньше наблюдали за подобным примером; после того как мы доберемся до цифры 7, у нас заканчиваются цифры для дальнейшего подсчета. И нам нужен способ, который поможет представить восьмерку. Таким образом, мы добавляем еще один разряд, меняем 7 на 0 и получаем 10. Наш ответ 10 в восьмеричной системе будет представляет то, что мы обычно считаем 8 в десятичной.
Говоря о числах, созданных с использованием нескольких систем исчисления, можно сбиться с толку. Например, как мы только что видели, 10 в восьмеричной системе совершенно не совпадают с 10 в десятичной. Итак, с этого момента я буду использовать стандартное обозначение, где индекс, когда это будет нужно, обозначает систему чисел. Например, наша 10 в восьмеричной системе теперь выглядит как 108.
(Примечание редактора: Гораздо легче понять описанное, если изменить способ чтения этих чисел в голове. Например, для 108 я понимаю, что это восьмеричное «один-ноль» или «один-ноль в base8» А для 10 в десятеричной системе «десятичное один-ноль» или «один-ночь в base10» 1010 я прочитаю как "десятичное один-ноль" или "один-ноль в десятичной".)
Отлично, итак мы знаем, что 108 представляют восемь чисел. (Никогда не забывайте добавлять обозначение системы исчисления к цифре.) Какое следующее число после 778? Если вы сказали 1008, вы правы. Мы знаем это из того, что недавно прочли, что первая семерка в 778 представляет собой разряд восьмерок, а вторая семерка представляет единицы. Если мы добавим все это, то у нас получится 7*8 + 7*1 = 63
. Таким образом, мы имеем в общей сложности 6310. Таким образом, 778 = 6310. Мы все знаем, что 6410 следует после 6310.
Преобразование из восьмеричной системы в десятеричную.
Давайте посмотрим на более старый пример. Джон предлагает вам 478 печенек, а Джейн предлагает дать вам 4310 печенек. Чье предложение вы принимаете? Если вы хотите точно определиться, пройдите чуть вперед и создайте график для визуализации 478 с помощью первого инструмента. Давайте выясним его значение в десятичной системе, чтобы вы могли принять лучшее решение!
Как мы видим при подсчете, четыре из 478 представляют число групп из восьмёрок. Это логично - мы находимся в восьмеричной системе. Итак, в общей сложности у нас есть четыре группы из восьмёрок и семи групп из единиц. Если мы сложим все это, мы получим 4*8 + 7*1 =
3910
. Таким образом, 478 печенек - то же самое, что и 3910 печенек. Предложение Джейн сейчас кажется лучшим!
Образец, который мы видели ранее с использованием десятичной системы, также верен. Давайте рассмотрим 5238. Существует пять групп из 82, две группы из 81 степени и три группы из 80 (помните, что 80 степени = 1). Если мы сложим все это, 5*82 +
2*81 + 3*80 = 5*64 + 2*8 + 3 = 339
, то получим 33910, что является нашим окончательным ответом. Все представлено на диаграмме ниже:



Вот еще несколько примеров:
1118 = 1*82+1*81+1*80 = 64+8+1 = 7310
438 = 4*81+3*80 = 32+3 = 3510
61238 = 6*83+1*82+2*81+3*80 = 3072+64+16+3 = 315510
Преобразование из десятичной в восьмеричную систему исчисления
Преобразование чисел из десятичной в восьмеричную систему исчисления является сложным процессом, однако достаточно понятным. Главное, то, что мы должны обрабатывать процесс сверху. Начнем с примера: 15010.
Сначала мы найдем наибольшую степень 8, которая меньше нашего числа. В данном случае это 82 степени или 64 (от 83 это 512). Мы подсчитываем, сколько групп из 64 мы можем взять из 150. Это двойка, итак первая цифра в нашем числе в восьмеричной системе равна 2. На данный момент мы подсчитали 128 из 150, и у нас осталось 22.
Наибольшая степень 8, которая в сумме даст меньше 22, составляет 81 степени (т. е. 8). Сколько 8 можно вычесть из числа 22? Две, и, следовательно, наша вторая цифра тоже равна 2.
Наконец, мы остаемся с 6 и, очевидно, можем вычесть 6 и это будет наша последняя цифра. Мы получили 2268.
Фактически, мы можем сделать этот процесс более ясным с помощью математического вычисления. Вот наши шаги:
- 150/82 = 2 остаток 22
- 22/81 = 2 остаток 6
- 6/80 = 6
Наш окончательный ответ – это все наши числа без остатка или 226. Необходимо помнить, что нужно начинать с поиска степени самого большого разряда 8-ок, которая меньше нашего числа.
Работа с использованием любой системы исчисления
Важно иметь возможность применять правила, которые мы узнали о восьмеричной и десятеричной системах исчисления друг к другу. Как в восьмеричной системе существует восемь цифр, а в десятеричной десять, в соответствии с системой исчисления. Итак, в пятеричной системе исчисления - пять цифр (0-4), а в семеричной - семь цифр (0-6) и т. д.
Теперь давайте посмотрим, как перевести значение из десятеричной системы в любую другую. Скажем, мы работаем в системе b, где n может быть любым положительным целым числом. У нас есть число d4d3d2d1d0, где d – число в степени. (В данном случае индекс не является системой исчисления, а служат для отделения каждой цифры.) Наше значение в десятеричной системе следующее:
d4*b4 + d3*b3 + d2*b2 + d1*b1 + d0*b0
.
Вот пример: у нас есть число 32311 в четверичной системе. Обратите внимание, что наше число имеет цифры от нуля до трех, поскольку base-4 содержит только четыре цифры. Наше значение в десятеричной
системе будет равно 3*44 + 2*43 + 3*42 + 1*41 + 1*40 = 3*256
+ 2*64 + 3*16 + 1*4 + 1*1 = 949
. Мы можем использовать этот шаблон, используя любое количество цифр в нашем числе.
Base-16
Base-16 также называется шестнадцатеричной системой исчисления. Она обычно используется в программировании и очень важна для нас. Давайте начнем с подсчет, используя шестнадцатеричную систему, мы сможем убедиться, что мы узнали о других системах исчисления.
Поскольку мы работаем с 16-ой системой исчисления, у нас есть 16 цифр. Итак, у нас есть 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ... и упс! У нас закончились цифры, но нам еще нужно еще шесть штук. Может быть, мы могли бы использовать что-то вроде цикла десяток?
По правде говоря, мы могли бы, но это было бы сложно. Вместо этого мы просто используем буквы алфавита, начиная с A и до F. Вот таблица со всеми цифрами СИ 16

Помимо дополнительных цифр, шестнадцатеричный код похож на любую другую СИ. Например, давайте преобразуем 3D16 в base-10. Следуя нашим предыдущим правилам, мы имеем: 3D16 = 3*161 + 13*160 = 48 + 13 = 61
. Таким образом, 3D16 равно 6110. Обратите внимание, что D у нас равно 13.
Мы можем перевести из СИ 10 в СИ 16, подобно тому, как мы это делали с СИ 8. Давайте переведем 69610 в СИ 16. Сначала мы находим наибольшую степень 16, которая меньше 69610. Это 162 или 296. Затем:
- 696/162 = 2 остаток 184
- 184/161 = 11 остаток 8
- 8/161 = 8 остаток 0
Мы должны заменить 11 своим цифровым значением B, и получим 2B816.
Для практики используйте различные варианты конвертации одной системы исчисления в другую. Вы можете использовать приложение ниже, чтобы проверить свои ответы:
Двоичная система! Двоичная СИ
На знаменитую базу-2, также называемую двоичной. В то время как все знают, что двоичный код состоит из 0 и 1, важно понять, что он не отличается математически, чем любая другая база. Есть старая шутка, которая звучит так:
Можете ли вы понять, что это значит?
Попробуем несколько преобразований с базой-2. Сначала мы преобразуем 1011002 в base-10. Мы имеем: 101100 = 1*25 + 1*23 + 1*22 = 32 + 8 + 4 = 4410
.
Теперь давайте преобразуем 65 в двоичный файл. 26 - наивысшая мощность 2 менее 65, поэтому:
- 65/26 = 1 остаток 1
- 1/25 = 0 остаток 1
- 1/24 = 0 остаток 1
- 1/23 = 0 остаток 1
- 1/22 = 0 остаток 1
- 1/21 = 0 остаток 1
- 1/20 = 1 остаток 0
И таким образом мы получаем наше двоичное число, 1000001.
Понимание двоичной системы очень важно. Я привел таблицу ниже, чтобы указать значения цифр.



Например, значение 10001 равно 17, что является суммой значений двух 1 цифр (16+1). Это ничем не отличается от того, что мы делали раньше, его просто представляли легко читаемым способом.
Хитрости и советы
Обычно, когда вы конвертируете числа между двумя СИ, которые не являются десятеричными, вы должны сделать что-то вроде этого:
- Преобразовать число в десятеричную СИ
- Преобразовать результат в желаемую СИ
Тем не менее, есть способ, который позволит вам быстро конвертировать числа между двоичными и шестнадцатеричными СИ. Сначала возьмите любое двоичное число и разделите его цифры на четыре группы. Итак, скажем, у нас есть номер 10111012. Разделенные у нас есть две группы 0101 1101. Обратите внимание, что мы добавили дополнительные нули в переднюю часть первой группы, чтобы сделать четные группы из 4. Теперь мы находим значение для каждой группы, как если бы оно было его собственное отдельное число, которое дает нам 5 и 13. Наконец, мы просто используем соответствующие шестнадцатеричные цифры, чтобы выписать номер базового 16, 5D16.
Мы также можем пойти в другом направлении, переведя каждую шестнадцатеричную цифру в четыре двоичные цифры. Попробуйте преобразовать B716 в двоичный. Вы должны получить 101101112.
Этот приём работает, потому что 16 - это степень числа 2. Это означает, что мы можем использовать подобный приём для восьмеричной СИ, которая также будет степенью числа 2:

Конечно, вы можете работать в обратном порядке и перейти от восьмеричной к двоичной СИ.
Вывод
Давайте вернемся назад и перейдем к игре с угадыванием цвета.
Во Flash цвета сохраняются как числа. Когда они преобразуются в шестнадцатеричные, первые две цифры представляют собой количество красного, а следующие два - зеленого, а последние два - синего. Итак, если наш цвет 17FF1816, мы можем легко сказать, что наш красный компонент равен 1716 или 2310. Наш зеленый компонент - FF16 или 25510. Наконец, наш синий компонент - 1816 или 2410. Если нам дана десятеричная версия нашего цвета, 157263210, нам нужно преобразовать его в шестнадцатеричный, прежде чем мы сможем рассказать что-нибудь с ним сделать.
Попробуйте поиграть снова и посмотрите, как вы можете это улучшить!
Понимание различных систем исчисления чрезвычайно полезна во многих областях связанных с компьютером. Двоичные и шестнадцатеричные СИ очень распространены, и я рекомендую вам хорошо ознакомиться с ними. Спасибо за чтение. Надеюсь, вы многому научились в этом уроке! Не стесняйтесь использовать исходный код любой из демонстрационных версий. Кроме того, если у вас есть какие-либо вопросы, пожалуйста, задавайте их ниже.