Системы счисления и преобразования
В основе того, как код обрабатывает информацию, лежит использование систем счисления! Это длинное руководство предоставит основную информацию о десятичных, двоичных и шестнадцатеричных числах.
* В конце я также расскажу о преобразованиях между тремя системами счисления.
Общие системы счисления
Десятичные числа
Десятичные числа — это основные числа, которые мы используем в повседневных расчетах, и они находятся в десятичной системе счисления.
Десятичные числа имеют значения 10^N. Диапазон от [0, 10^N-1].
Пример:
- Трехзначное десятичное число: 10³ = 1000 возможных значений.
- Диапазон: [0, 999]
Добавление десятичных чисел - это простое сложение
Двоичные числа
Двоичные числа обрабатываются в двоичном формате. Компьютеры используют двоичный код для обработки, то есть используют только единицы и нули. Единица (1) представляет собой состояние «включено», а ноль (0) представляет состояние «выключено».
*Обычно полезно запоминать степень до 9 для двоичного числа.
Двоичные числа имеют 2 ^ N значений. Диапазон от [0, 2^N-1].
Пример:
- Трехзначное двоичное число: 2³= 8 возможных значений
- Диапазон: [0, 7] = [000 (по основанию 2) до 111 (по основанию 2)]
Сложение двоичных чисел немного отличается от традиционного сложения. Ключом к тому, как я изучил бинарное сложение, является знание того, что:
1 + 1 = 0, перенести 1 в следующий столбец
Добавление двоичных чисел также может привести к «переполнению». Это означает, что будет больше чисел, чем содержались исходные 2 значения. Если вы посмотрите на пример ниже, вы увидите 4 цифры для двоичных чисел. Теперь, если вы добавите 2 двоичных значения, содержащих более 4 цифр, скажем, 5 цифр, возникнет «переполнение».
Если вы когда-нибудь столкнетесь с переполнением, отбросьте лишнюю цифру, которая у вас получится.
Теперь двоичные файлы также могут быть «подписаны», что означает, являются ли они положительными или отрицательными. Есть две категории «подписанных» номеров:
- Числа со знаком/величины
- Дополнение до двух
Числа со знаком/величины
Подписанные биты имеют свою величину, содержащуюся в N-1 битах, в то время как знак является самым значащим битом. Знак является наиболее важным, поскольку он указывает, будет ли число положительным или отрицательным.
Примечание. Остальные биты представлены в соответствующих двоичных значениях.
- Бит. Бит (сокращение от двоичной цифры) — это наименьшая единица данных в компьютере. Бит имеет одно двоичное значение, либо 0, либо 1.
- Положительное число: знаковый бит = 0
- Отрицательное число: знаковый бит = 1
• Пример, 4-битное представление знака/величины ± 6:
- +6 = 0110
- - 6 = 1110
• Диапазон N-битного знака/величины:
[-( (2^N-1) –1), (2^N-1) –1]
Для чисел со знаком/величины величина содержится в битах N-1, в то время как знак является старшим битом.
Теперь есть некоторые проблемы с числами знака/величины.
–Сложение не работает, например -6+6:
- 1110 + 0110 = 10100 (неверно!)
– Два представления 0 (± 0):
- 1000 («отрицательная» версия 0)
- 0000 («положительная» версия 0
Дополнение до двух
Дополнительные числа до двух не имеют проблем, которые есть у чисел со знаком/значением.
- Дополнение работает
- Одно представление для 0
Дополнение до двух идентично двоичным числам, за исключением того, что самая значащая битовая позиция имеет вес -2 ^ N-1 вместо 2 ^ N-1.
Доступная величина дополнения до двух всегда равна N-1 от общего числа битов.
- Самое положительное 4-битное число: 0111
- Самое отрицательное 4-битное число: 1000
- Старший бит по-прежнему указывает на знак (1 = отрицательный, 0 = положительный)
- Диапазон N-битного числа двойки: [-(2^N-1), 2^N-1–1]
Есть еще один аспект дополнения до двух, где вы можете преобразовать положительное значение в эквивалентное отрицательное значение.
Дополнение до двух
Метод:
- Инвертировать биты
- Добавить 1
Когда я говорю «инвертировать», я на самом деле имею в виду заменить все 0 на 1 и заменить все 1 на 0.
Пример:
(инвертировать)(0011) = 1100
Добавление 1 будет простым двоичным сложением, которому я учил ранее.
Шестнадцатеричные числа
Шестнадцатеричные числа представляют собой систему счисления с основанием 16 и являются сокращением для двоичной системы счисления. Приведенная выше таблица может дать вам хорошее представление о том, как шестнадцатеричные числа преобразуются между двоичными и десятичными числами.
Знайте, что:
- Может быть 2⁶⁴ различных чисел, которые представлены 64-битными битами.
- Самое большое беззнаковое 32-битное двоичное число равно 2³²-1.
Самое большое 16-битное двоичное число, которое может быть представлено
- Беззнаковые числа это… 2¹⁶-1
- Дополнительные числа до двух — это… 2¹⁵-1
- Числа знака/величины… 2¹⁵-1
Практика Проблемы
На таких занятиях, как цифровая логика и сборочная обработка, вас попросят узнать, как конвертировать между системами счисления. Я оставлю практические задачи ниже, чтобы дать вам представление о том, что я делаю в своем собственном классе.
- Преобразуйте следующие двоичные числа без знака в шестнадцатеричные.
a) 1011 1100
b) 1010
Мы можем решить эту проблему, просто обратившись к диаграмме, конвертирующей между тремя системами счисления, о которых я говорил.
a) 1011 = B, 1100 = C
b) 1010 = A
2. Преобразуйте следующие десятичные числа в беззнаковые двоичные.
a) 85
b) 182
Я подхожу к этим задачам, устанавливая степени двойки, начиная с 0 и заканчивая 7. Затем я помечаю значения, которые в сумме дают желаемое число, знаком «1». Есть несколько других способов сделать это, но в основном это личные предпочтения.
a) 0 1 0 1 0 1 0 1 ( 64 + 16 + 4 + 1 ) = 85
b) 1 0 1 1 0 1 1 0 ( 128 + 32 + 16 + 4 + 2 ) = 182
3. Преобразуйте следующие шестнадцатеричные числа в десятичные.
a) 7D
b) EA1
Для этих задач я беру десятичное значение шестнадцатеричного числа и устанавливаю обратную хронологическую сумму произведений с основанием 16, начиная с 0.
a) ( 7 * 16¹ ) + (13 * 16⁰) = 125
- D = 13 для математики, которую я сделал выше
b) ( 14 * 16² ) + ( 10 * 16¹) + ( 1 * 16⁰ )
- E = 14 и A = 10 для математики, которую я сделал выше
4. Преобразовать двоичное число без знака в десятичное.
a) 1011 1100
- 2⁷ + 2⁵ + 2⁴ + 2³ + 2² = 188
b) 1010
- 2³ + 2¹ = 10
5. Преобразовать двоичное число без знака в шестнадцатеричное.
a) 0101 0101
- 0101 = 5, 0101 = 5, таким образом, ответ 55
b) 1011 0110
- 1011 = B, 0110 = 6, поэтому ответ B6
6. Преобразовать шестнадцатеричное число в двоичное.
a) 7D
- (7) 0111 (D) 1101
b) EA1
- (E) 1110 (A) 1010 (1) 0001
7. Преобразовать двоичное число со знаком в шестнадцатеричное.
a) 1100 1100
- (C) 1100 = CC
b) 0010 1011
- (2) 0010, (B) 1011 = 2B
8. Преобразование десятичного числа в двоичное со знаком.
a) 18
- (16 + 2) = 18 = 010010
b) -10
- Применить дополнение до двух
- 01010 это значение 10
- 10101 + 1; Здесь я инвертировал значение 10 и теперь добавляю единицу с точки зрения двоичного сложения.
- Окончательный ответ: 10110
9. Преобразование шестнадцатеричных чисел в десятичные.
a) C3
- (C) ( 12 * 16¹ ) + ( 3 * 16⁰ ) = 195
b) 16
- ( 1 * 16¹ ) + ( 6* 16⁰ ) = 22
10. Преобразовать двоичное число со знаком в десятичное.
a) 1100 1100
- -128 + 64 + 8 + 4 = -52
b) 0010 1011
- 32 + 8 + 2 + 1 = 43
11. Используйте преобразованное десятичное число из числа 8, чтобы преобразовать двоичное число со знаком в шестнадцатеричное.
a) 0001 0010
- 1 = 0001, 2 = 0010; Ответ: 12
b) 1111 0110
- Ф = 1111, 6 = 0110; Ответ: F6
12. Преобразовать шестнадцатеричное число в двоичное со знаком.
a) C3
- С = 1100, 3 = 0011; Ответ: 1100 0011
b) 16
- 1 = 0001, 6 = 0110; Ответ: 0001 0110