VirQ. Системы счисления в C#
Язык C# входит в ТОП-5
самых популярных языков
программирования
Главная / Целочисленные переменные /
Системы счисления
Статей на сайте: 61

Системы счисления


Что такое системы счисления? Мы привыкли что считая до 9, появляется новый разряд, а единицы опять превращаются в 0. Итого, было 9, получаем 10. Т.е. в виде одного символа (в данном случае цифры и её начертания, как мы привыкли), можно обозначить кол-во в 10 вариантах: 0,1,2,3,4,5,6,7,8,9. На одном ролике счётчика газа и воды 10 цифр. И это десятичная система. Однако не всегда цифра 9 является переходом на добавление нового разряда. Об этом и тема.

2-чная система (двоичная)

Она из себя представляет набор цифр 0 и 1. Информация на жёсткий диск как раз так и записывается.
Вот так выглядит поверхности записанной (слева) и чистой (справа) поверхности компакт-диска. Короткие и длинные канавки прорезаются лазером.


На жёстком диске процесс записи производится намагниченными и ненамагниченными "точками", что представляет с собой 0 или 1.
В стандартной 256-байтовой кодировке каждый символ кодируется 8 битами.
Например:
А (код 65) = 01000001
B (код 66) = 01000010
C (код 67) = 01000010
Z (код 90) = 01011010
= (код 61) = 00111101
6 (код 54) = 00110110
Получается, слово BASE на диске будет записано так:
01000010 01000001 01010011 01000101

[code] char ch = 'Z'; //Задать желаемый символ byte b = (byte)ch; //Получить десятичный код символа string s = Convert.ToString(b, 2); //Получить двоичный код символа [/code]
Пример соответствий между 10 и 2-чной системами:
Console
×
10-ная 2-чная
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
16 10000
17 10001
18 10010


Сразу понять пользу 2-ичной системы нелегко. Но вот один из более явных примеров, зачем это нужно.
Каждый 0 и 1 - это бит. 8 бит - это 1 байт.
Получается, в 1 байте можно сохранить до 8 различных значений, подходящих по смыслу включено (1) и выключено (0).
8 значений в 1 байте. Например, это могут быть 8 выключателей. Не обязательно 8. До 8 в 1 байте.
Один из таких примеров в программировании является оформление шрифта.
[code] public enum FontStyle { // Сводка: // Стандартный текст. Regular = 0, // // Сводка: // Текст, выделенный жирным шрифтом. Bold = 1, // // Сводка: // Текст, выделенный курсивом. Italic = 2, // // Сводка: // Текст, выделенный подчеркиванием. Underline = 4, // // Сводка: // Текст с линией посредине. Strikeout = 8, } [/code]
Как видим, каждое из этих значений содержит число. В двоичной системе это будет так:
0 - 00000000
1 - 00000001 (задействован 1-ый бит)
2 - 00000010 (задействован 2-ой бит)
4 - 00000100 (задействован 3-ий бит)
8 - 00001000 (задействован 4-ый бит)

Если шрифт будет жирным и курсивным, значит это Bold+Italic = 1+2 = 3
В двоичной системе это будет так:
3 - 00000011 (задействован 1 и 2 бит)

Но для сохранения такого стиля шрифта не нужно ничего вычислять. Всё пишется проще:
[code] FontStyle fs = FontStyle.Bold | FontStyle.Italic; //Жирный и курсивный FontStyle fs = FontStyle.Bold | FontStyle.Italic | FontStyle.Underline; //Жирный, курсивный и подчёркнутый [/code]
Знак "|" в данном случае, как "и" надо воспринимать. Жирный И курсивный.
Данное подробное объяснение только для понимания сути двоичной системы.
2-ную кодировку в интернете можно встретить в виде такой таблицы



8-чная система (восьмиричная)

Это система из цифр 0,1,2,3,4,5,6,7
Далее после 7 идёт 10. Добавляется разряд.
10,11,12,13,14,15,16,17
20,21,22,23,24,25,26,27
...
70,71,72,73,74,75,76,77
100,101,102...
Т.е. в этой системе нет цифр 8 и 9.
Пример привести не получится. К сожалению, не знаю, где в программировании 8-ричная система может применяться.
Однако код для перевода из 10 в 8-ричную систему всё же есть. Он прост:
[code] int n = 100; int n = 100; string s = Convert.ToString(n, 8); //Получите 144 [/code]
Чтобы было понятнее
Console
×
10-ная 8-чная
0 0
1 1
... ...
7 7
8 10
9 11
10 12
11 13
12 14
13 15
14 16
15 17
16 20
... ...
100 144


16-чная система (шестнадцатиричная)

16-ричная система часто встречается в создании md5-отпечатка какого-нибудь текста, в оформлении цвета, кода символа таблицы ASCII
Представьте, что с 1 класса вы знаете не 10 цифр, а 16.
И эти цифры назывались бы так: А, В, С, D, E, F
Представьте счётчики, тахометры с 16 значениями на 1 ролике, а не с 10, как это сейчас привычно от 0 до 9.
Тогда числовой ряд строился бы так:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13...
17,18,19,1A,1B,1C,1D,1E,1F,20,21,22,23...
...
88,89,8A,8B,8C,8D,8E,8F,90,91,92,93...
98,99,9F,9B,9C,9D,9E,9F,A0,A1,A2,A3,A4...
A7,A8,A9,AA,AB,AC,AD,AE,AF,B0,B1,B2...
...
F7,F8,F9,FA,FB,FC,FD,FE,FF,100,101,102
Если вы внимательно посмотрите, то поймёте, что "9" не добавляет 1 к новому разряду.
39 превращается в 3А, а не в 40.
9 превращается дальше в "А". Потом "В". И так до "F".
А вот "F" - это как раз последняя цифра ряда.
3F тогда превращаются в 40

16-ричную кодировку можно часто встретить, если в поисковике задать вопрос кодировок ASCII кодов.
HEX - 16-ричная
DEC - 10-тичная
OCT - 8-ричная



Примеры:
md5: d188e2456f10509ed98705cb44996f26 (md5-хэш слова "virq")
Тут значение состоит из 16 различных значений 16-ричной системы
d1 88 e2 25 6f...

цвет: #a7bc9f
Это соединение красного (a7), зелёного (bc) и синего (9f) цвета

код буквы Z: 5a
Это код символа 90 десятичной системы. 5а - это в 16-ричной системе

[code] char ch = 'Z'; //Задать желаемый символ byte b = (byte)ch; //Получить десятичный код символа string s = Convert.ToString(b, 16); //Получить 16-ричный код символа [/code]

В каждом калькуляторе любой операционной системы есть возможность перевода между системами счисления.
Переключитесь в режим программиста. Калькулятор может быть таким:


таким:


или другим, в зависимости от вашей операционной системы.

Для быстрого подсчёта между системами используйте переключатели HEX (16-ричная), DEC (10-тичная), OCT (8-ричная) и BIN (2-ичная)
Примеры перевода между системами счисления на языке C#

Дополнительная информация о том, как вывести результат в консоли или WinForm