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

В основе того, как код обрабатывает информацию, лежит использование систем счисления! Это длинное руководство предоставит основную информацию о десятичных, двоичных и шестнадцатеричных числах.

* В конце я также расскажу о преобразованиях между тремя системами счисления.

Общие системы счисления

Десятичные числа

Десятичные числа — это основные числа, которые мы используем в повседневных расчетах, и они находятся в десятичной системе счисления.

Десятичные числа имеют значения 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. Инвертировать биты
  2. Добавить 1

Когда я говорю «инвертировать», я на самом деле имею в виду заменить все 0 на 1 и заменить все 1 на 0.

Пример:

(инвертировать)(0011) = 1100

Добавление 1 будет простым двоичным сложением, которому я учил ранее.

Шестнадцатеричные числа

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

Знайте, что:

  • Может быть 2⁶⁴ различных чисел, которые представлены 64-битными битами.
  • Самое большое беззнаковое 32-битное двоичное число равно 2³²-1.

Самое большое 16-битное двоичное число, которое может быть представлено

  • Беззнаковые числа это… 2¹⁶-1
  • Дополнительные числа до двух — это… 2¹⁵-1
  • Числа знака/величины… 2¹⁵-1

Практика Проблемы

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

  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