Инструменты пользователя

Инструменты сайта


msx:yamaha_msx-basic_reference_manual:appendix_d

Первая страницаПредыдущая страницаНазад к обзору

Приложение Д. Системы представления чисел

Страницы 352–359

FIXME

Двоичная, восьмеричная и шестнадцатеричная системы счисления

Независимо от системы счисления, число всегда может рассматриваться в качество полинома «по B», где B — основание. Более того, основание определяет общее количество цифр, используемых для написания чисел.

Следовательно abcd с основанием B может быть интерпретировано следующим образом:
abcd = d * B0 + c * B1 + b * B2 + a * B3
Значение цифр a, b, c и d находится между 0 и B-1.

Система Используемые цифры Основание
Двоичная 0 1 2
Восьмеричная 0 1 2 3 4 5 6 7 8
Десятичная 0 1 2 3 4 5 6 7 8 9 10
Шестнадцатеричная 0 1 2 3 4 5 6 7 8 9 A B C D E F 16
Десятичное значение цифр 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

В шестнадцатеричной системе не хватает 6 символов, необходимых для представления чисел со значением от 10 до 15, поэтому используются буквы от A до F.

Примечание:
Во всех системах последовательные степени основания записываются следующим образом: 1, 10, 100, 1000, 10000, …

Преобразования

  1. Преобразование из любой системы в десятичную. Преобразуемое число первоначально переводиться в полином:

    100112= 1*20 + 1*21 + 0*22 + 0*23 + 1*24
    = 1 + 2 + 0 + 0 + 16
    = 1910
    1AF16= F*160+F*161+F*162
    = F+A*16+256
    = 43110
  2. Преобразование из десятичной в другую систему. Пусть B является основанием, к которому должно быть приведено число N1, записанное в десятичном виде.

    Преобразование осуществляется следующим образом:

    • Вычисляется R1 = N1 MOD B
      N2 = N1\B
    • Если N2 = 0, преобразование заканчивается.
      Если N2 > 0, таким же образом вычисляются R2 и N3.
      Полученная последовательность R1, R2, R3, … соответствует цифрам числа с основанием B.

    Пример 1: записать 19 в двоичном виде:

    R1= 19 MOD 2 = 1
    N2= 19\2 = 9
    R2= 9 MOD 2 = 1
    N3= 9\2 = 4
    R3= 4 MOD 2 = 0
    N4= 4\2 = 2
    R4= 2 MOD 2 = 0
    N5= 2\2 = 1
    R5= 1 MOD 2 = 1
    N6= 1\2 = 0
    1910= 100112

    Пример 2: записать 234 в шестнадцатеричном виде:

    R1= 234 MOD 16 = 10 → A
    N2= 234\16 = 14
    R2= 14 MOD 16 = 14 → E
    N3= 14\16 = 0
    23410= EA16
  3. Преобразование «двоичная/шестнадцатеричная»

    Преобразование между любыми двумя системами может осуществляться через посредство десятичной. Сначала преобразование идёт в соответствии с п.1, а затем — п.2. Преобразование между двоичной и шестнадцатеричной системами может осуществляться быстрее:

    Пример 1: записать 1000111112 в шестнадцатеричном виде

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

    1 0001 1111
    1 1 F
    1000111112 = 11F16

    Пример 2: записать 11F16 в двоичном виде

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

    1 1 F
    0001 0001 1111
    11F16 = 000100011111 = 1000111112

Представление в памяти целых чисел

Итак, все числа должны быть записаны в электронной памяти компьютера в двоичном виде. Однако, существуют различия между «математическим» двоичным представлением, которое только что было объяснено, и компьютерным:

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

Элемент, способный представлять 0 и 1 называется битом.

Компьютерная память распределена на группы по восемь битов, называемые байтами. Компьютер может обратиться к содержимому любого байта в памяти по определённому «адресу».

Из практических соображений целое число храниться в двух байтах, что даёт 65536 различных конфигураций:

00000000 00000000 = 0
00000000 00000001 = 1
00000000 00000010 = 2
00000000 00000011 = 3
─────────────────────────
11111111 11111111 = 65536

На первый взгляд кажется, что два байта позволяют представить целые числа от 0 до 65536. Но на компьютере первый бит зарезервирован для знака числа: если первый бит — 0, число положительное; если же оно отрицательное, то первый бит — 1.

Следующие конфигурации битов представляют положительные числа:

00000000 00000000 = 0
00000000 00000001 = 1
─────────────────────────
01111111 11111111 = 32767

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

  • Он начинает с конфигурации битов в «положительной форме».
  • Затем он инвертирует каждый бит (1 становиться 0, 0 становиться 1).
  • К младшему биту добавляется 1; игнорируется возможность переноса в старший бит.

Пример 1: представление -1

00000000 00000001 = + 1
11111111 11111110 все биты инвертированы
11111111 11111111 к младшему биту добавлена 1 (переноса нет)

В памяти компьютера -1 имеет то же двоичное представление, что и 65536 в математике. Поэтому -1 считается двоичным представлением 65536.

Пример 2: представление -32767

01111111 11111111 = 32767
10000000 00000000 инвертированные биты
10000000 00000001 добавлена 1

Таким образом, в двух байтах возможно представление следующих чисел:

00000000 00000000 = 0
00000000 00000001 = 1
──────────────────────────
01111111 11111111 = 32767
11111111 11111111 = -1
11111111 11111110 = -2
──────────────────────────
10000000 00000001 = -32767
10000000 00000000 = -32768

Итак, мы получили представление чисел от -32768 до +32767, т.е. всего 65535 различных значений.

Зачем нужно такое сложное представление?

На практике такое представление чисел с использованием дополнительного кода предоставляет два преимущества:

  1. Одно представление нуля (+0 и -0 записываются в виде 16–ти нулевых битов).
  2. Операция состоящая в получении двоичного дополнительного кода обратима. Для понимания того, что представляет 11111111 11111111, заметьте, что в первом бите 1 (следовательно представление отрицательное). Затем вычислите дополнительный код, который будет равен 00000000 00000001. Представлена -1.
  3. Не требует специальных схем вычитания:

Для вычитания используется схема получения дополнительного кода и схема сложения.

Пример 1: как компьютер получает результат операции 256 - 8

256 = 00000001 00000000
  8 = 00000000 00001000

Двоичный дополнительный код этой конфигурации:

-8  = 11111111 11111000 

Компьютер получает сумму:

  00000001 00000000
+ 11111111 11111000
─────────────────────────
  00000000 11111000 = 248

Пример 2: вычисление 8 - 256

   8 = 00000000 00001000
 256 = 00000001 00000000
-256 = 11111111 00000000
       00000000 00001000
     + 11111111 00000000
─────────────────────────
       11111111 00001000

Для получения значения этого отрицательного числа вычисляется его дополнительный код, который равен

00000000 11111000 = 248

В результате вычитания действительно получается -248.


Первая страницаПредыдущая страницаНазад к обзору

msx/yamaha_msx-basic_reference_manual/appendix_d.txt · Последние изменения: 2022-05-11 09:30 — GreyWolf