Системы счисления в программировании

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

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

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

Каждый из этих пикселей сплошного цвета обычно представлен тремя числами: одно — количество красного цвета, другое — количество зеленого и третье — количество синего. Например, полностью красный пиксель будет иметь 100% красного, 0% зеленого и 0% синего.

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

Десятичное число 423 содержит три единицы, два десятка и четыре десятка.

В системе счисления по основанию 10 каждая цифра числа может иметь значение 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9, что дает в общей сложности 10 возможных значений для каждой цифры. Но фактическое значение каждой цифры зависит от ее положения в числе.

Двигаясь справа налево, каждая цифра умножается на возрастающее значение 10. Так, множитель для крайней правой цифры равен 10 в степени 0, то есть 1. Двигаясь влево, следующий множитель равен 10 в степени 1, то есть 10. Если снова переместиться влево, то следующий множитель будет равен 10 в степени 2, то есть 100. И так далее.

Это означает, что каждая цифра имеет значение, в десять раз превышающее значение цифры справа от нее. Число 423 равно следующему:

(0 * 1000) + (4 * 100) + (2 * 10) + (3 * 1) = 423

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

Поскольку вас учили работать с десятичной системой, вам не нужно думать о том, как считать большинство чисел — это кажется вполне естественным. Но для компьютера десятичная система — это слишком сложно! Компьютеры просты, помните? Им нравится работать с двоичной системой.

В двоичной системе есть только два варианта для каждой цифры: 0 или 1.

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

Вот представление числа 1101 в двоичной системе:

В десятичной системе значения увеличиваются в 10 раз: 1, 10, 100, 1000 и т. д. В двоичной системе счисления они увеличиваются в 2 раза: 1, 2, 4, 8, 16 и т. д. Общее правило заключается в умножении каждой цифры на возрастающую силу основного числа — в данном случае на силу 2 — двигаясь справа налево.

Так, крайняя правая цифра представляет собой (1 * 2^0), то есть (1 * 1), то есть 1. Следующая цифра слева представляет собой (0 * 2^1), то есть (0 * 2), то есть 0.

Говоря иначе, каждая 2 либо есть (1), либо нет (0) в качестве компонента двоичного числа. Десятичная версия двоичного числа представляет собой сумму всех степеней 2, составляющих это число. Таким образом, двоичное число 1101 равно:

(1 * 8) + (1 * 4) + (0 * 2) + (1 * 1) = 13

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

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

Как вы можете видеть, сканируя двоичные цифры в приведенном выше уравнении, результирующее двоичное число равно 110100111. Вы можете доказать себе, что оно равно 423, выполнив математические действия!

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

Ограниченная память компьютера означает, что он обычно может работать с числами определенной длины. Каждый регистр, например, обычно имеет длину 32 или 64 бита, поэтому мы говорим о 32-битных и 64-битных процессорах.

Таким образом, 32-битный процессор может обрабатывать максимальное число 4 294 967 295, что является основанием 2 числа 1111111111111111111111111111111111111111111111. Это 32 единицы — посчитайте их!

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

Шестнадцатеричная система

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

Конечно, для цифр не существует 16 отдельных чисел, их всего 10. Чтобы дополнить их, мы используем первые шесть букв, от a до f.

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

  • a=10
  • b=11
  • c=12
  • d=13
  • e=14
  • f=15

Приведем пример с основанием 16, используя тот же формат, что и раньше:

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

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

(12 * 4096) + (0 * 256) + (13 * 16) + (14 * 1) = 49374

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

Шестнадцатеричное исчисление полезно тем, что каждая шестнадцатеричная цифра может представлять ровно четыре двоичные цифры. Двоичное число 1111 эквивалентно шестнадцатеричному f.

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

Например, рассмотрим число c0de, приведенное выше:

c = 1100
0 = 0000
d = 1101
e = 1110
c0de = 1100 0000 1101 1110

Это оказывается весьма полезным, учитывая, как компьютеры используют длинные 32- или 64-битные двоичные числа. Вспомните, что самое длинное 32-битное число в десятичной системе счисления — 4 294 967 295. В шестнадцатеричном виде оно равно ffffffff. Это гораздо компактнее и понятнее.

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

Ваш адрес email не будет опубликован.