Общие сведения
Для кодирования информации используются различные формы представления данных. Это объясняется тем, что компьютер «не понимает» обыкновенного человеческого языка напрямую. Любая команда переводится в машинный код при помощи специальных алгоритмов кодирования данных. Чтобы в них разобраться, нужно освоить базовые понятия, к которым относятся следующие:
- Разрядная сетка.
- Виды СС.
- Перевод числовой информации на примере восьмеричной системы счисления.
Разрядная сетка
Разрядной сеткой называется совокупность цифр, расположенных в определенном порядке значимости элементов. На первый взгляд, определение является сложным для понимания. Однако это не так. Чтобы в этом убедиться, необходимо разобрать число «126789». Оно состоит из компонентов, которые называются цифрами, где каждая принимает значение из диапазона от 0 до 9. Любая из них находится на определенном месте, а именно:
- 9 — единицы.
- 8 — десятки.
- 7 — сотни.
- 6 — тысячи.
- 2 — десятки тысяч.
- 1 — сотни тысяч.
Следует отметить, что значимость элементов определяется очень просто. Для этого нужно сравнить для примера сотни и единицы. Первые больше, чем вторые. На основании этого примера утверждение о значимости доказано.
Виды систем счисления
Системы счисления условно делятся на две группы. К ним относятся следующие:
- Позиционные.
- Унарные.
В первом случае расположение математических символов (цифр) играет важную роль, поскольку влияет на величину числа в целом. Чтобы в этом убедиться, нужно разобрать значение в десятичном формате 192. Для опыта необходимо переставить знаки. При этом получаются пять числовых величин:
- 921.
- 912.
- 219.
- 291.
- 129.
Следует отметить, что каждое из них отличается от другого. Все пять чисел можно также сравнить с исходным значением. Из выполненного опыта можно сделать вывод, что расположение компонентов в разрядной сетке имеет значение. К позиционным СС относятся следующие основные формы представления чисел:
- Двоичная.
- Восьмеричная.
- Шестнадцатеричная.
Однако существуют и другие формы представления числовых величин, а именно: третичная, четвертичная, пятеричная и т. д. Основным их отличием является основание.
Другим примером является подсчет количества мешков сахара, погруженных на грузовую машину. При загрузке одного мешка бригадир ставит обыкновенный произвольный символ, обозначающий единицу. У каждой системы счисления существует определенный алфавит или символы, используемые для записи цифр и чисел.
Двоичный код
Перед тем как начать работу с восьмеричным кодом нужно ознакомиться с двоичным. Чтобы перевести число из десятичной формы в двоичную, требуется воспользоваться следующим алгоритмом:
- Записать величину: 19.
- Поделить ее на двойку, обозначив остаток (1 — нацело не делится, 0 — целочисленное деление): 19/2=9 (в остатке 1).
- Поделить частное во втором пункте на 2: 9/2=4 (1).
- 4/2=2 (0).
- 2/2=1 (0).
- 1 — остаток
- Искомое значение (записывается снизу вверх): {2}.
Обратная операция выполняется по более упрощенной методике. Она имеет такой вид:
- Записать двоичный код: {2}.
- Умножить каждый его элемент на определенную степень, т. е. 1*2^4+0*2^3+0*2^2+1*2^1+1*2^0=19.
- Искомое значение: {2}.
Дополнительный код (дополнение до единицы)[править]
Нумерация двоичных чисел в представлении c дополнением до единицы. В отличии от кода со сдвигом, нулю соответствуют коды и
В качестве альтернативы представления целых чисел может использоваться код с дополнением до единицы (англ. Ones’ complement).
Алгоритм получения кода числа:
- если число положительное, то в старший разряд (который является знаковым) записывается ноль, а далее записывается само число;
- если число отрицательное, то код получается инвертированием представления модуля числа (получается обратный код);
- если число является нулем, то его можно представить двумя способами: или .
Пример: переведём число в двоичный восьмибитный код. Прямой код модуля : , инвертируем и получаем .
Для получения из дополнительного кода самого числа достаточно инвертировать все разряды кода.
Таким способом можно получить диапазон значений .
Достоинства представления чисел с помощью кода с дополнением до единицыправить
- Простое получение кода отрицательных чисел.
- Из-за того, что обозначает , коды положительных чисел относительно беззнакового кодирования остаются неизменными.
- Количество положительных чисел равно количеству отрицательных.
Недостатки представления чисел с помощью кода с дополнением до единицыправить
- Выполнение арифметических операций с отрицательными числами требует усложнения архитектуры центрального процессора.
- Существуют два нуля: и .
Знаковое представление величины
Это представление также называется представлением «знак-величина» или «знак и величина». В этом подходе знак числа представлен в виде знаковый бит: установка этого кусочек (часто старший бит) на 0 для положительного числа или положительного нуля и установка на 1 для отрицательного числа или отрицательного нуля. Остальные биты в номере указывают величину (или абсолютная величина). Например, в восьмибитном байт, только семь битов представляют величину, которая может варьироваться от 0000000 (0) до 1111111 (127). Таким образом, числа в диапазоне от -12710 до +12710 может быть представлен после добавления знакового бита (восьмого бита). Например, −4310 закодировано в восьмибитном байте 10101011 а 4310 является 0101011. Использование представления величины со знаком имеет несколько последствий, что делает их более сложными для реализации:
- Есть два способа представить ноль: 00000000 (0) и 10000000 (−0).
- Сложение и вычитание требуют различного поведения в зависимости от знакового бита, в то время как одно дополнение может игнорировать знаковый бит и просто выполнять сквозной перенос, а два дополнения могут игнорировать знаковый бит и зависеть от поведения переполнения.
- Сравнение также требует проверки знакового бита, тогда как в дополнении до двух можно просто вычесть два числа и проверить, положительный или отрицательный результат.
- Минимальное отрицательное число -127 вместо -128 в случае дополнения до двух.
Этот подход напрямую сопоставим с обычным способом показа знака (размещение «+» или «-» рядом с величиной числа). Некоторые ранние бинарные компьютеры (например, IBM 7090) используют это представление, возможно, из-за его естественного отношения к обычному использованию. Знаковая величина — наиболее распространенный способ представления значимое в плавающая точка значения.
Другие системы
Google Буферы протокола «зигзагообразное кодирование» — это система, аналогичная системе «знак и величина», но с использованием младший бит для представления знака и имеет единственное представление нуля. Это позволяет количество переменной длины кодирование, предназначенное для неотрицательных (беззнаковых) целых чисел, которое эффективно используется для целых чисел со знаком.
Другой подход — дать каждому цифра знак, дающий представление цифр со знаком. Например, в 1726 г. Джон Колсон выступал за сокращение выражений до «маленьких чисел», цифр 1, 2, 3, 4 и 5. В 1840 г. Огюстен Коши также выразил предпочтение таким модифицированным десятичным числам для уменьшения ошибок в вычислениях.
Дополнительный код
В дополнительном коде, также как и прямом, первый разряд отводится для представления знака числа. Прямой код используется для представления положительных чисел, а дополнительный – для представления отрицательных. Поэтому, если в первом разряде находится 1, то мы имеем дело с дополнительным кодом и с отрицательным числом.
Все остальные разряды числа в дополнительном коде сначала инвертируются, т.е. заменяются противоположными (0 на 1, а 1 на 0). Например, если 1 0001100 – это прямой код числа, то при формировании его дополнительного кода, сначала надо заменить нули на единицы, а единицы на нули, кроме первого разряда. Получаем 1 1110011. Но это еще не окончательный вид дополнительного кода числа.
Далее следует прибавить единицу к получившемуся инверсией числу:
1 1110011 + 1 = 1 1110100
В итоге и получается число, которое принято называть дополнительным кодом числа.
Причина, по которой используется дополнительный код числа для представления отрицательных чисел, связана с тем, что так проще выполнять математические операции. Например, у нас два числа, представленных в прямом коде. Одно число положительное, другое – отрицательное и эти числа нужно сложить. Однако просто сложить их нельзя. Сначала компьютер должен определить, что это за числа. Выяснив, что одно число отрицательное, ему следует заменить операцию сложения операцией вычитания. Потом, машина должна определить, какое число больше по модулю, чтобы выяснить знак результата и определиться с тем, что из чего вычитать. В итоге, получается сложный алгоритм. Куда проще складывать числа, если отрицательные преобразованы в дополнительный код. Это можно увидеть на примерах ниже.
Другие системы
Существуют и другие базы подписанных цифр, такие как база . Ярким примером этого является кодирование Бута , в котором цифра установлена с помощью и , но используется основание . В стандартной двоичной системе счисления используются только цифры значения .
б ≠ б + + б — + 1 {\ displaystyle b \ neq b _ {+} + b _ {-} + 1} D знак равно { 1 ¯ , , 1 } {\ Displaystyle {\ mathcal {D}} = \ lbrace {\ bar {1}}, 0,1 \ rbrace} б + знак равно 1 {\ displaystyle b _ {+} = 1} б — знак равно 1 {\ displaystyle b _ {-} = 1} б знак равно 2 < 3 знак равно б + + б — + 1 {\ displaystyle b = 2 <3 = b _ {+} + b _ {-} + 1} { , 1 } {\ Displaystyle \ lbrace 0,1 \ rbrace}
Обратите внимание, что нестандартные представления цифр со знаком не уникальны. Например:
- 0111 D знак равно 4 + 2 + 1 знак равно 7 {\ displaystyle 0111 _ {\ mathcal {D}} = 4 + 2 + 1 = 7}
- 10 1 ¯ 1 D знак равно 8 — 2 + 1 знак равно 7 {\ displaystyle 10 {\ bar {1}} 1 _ {\ mathcal {D}} = 8-2 + 1 = 7}
- 1 1 ¯ 11 D знак равно 8 — 4 + 2 + 1 знак равно 7 {\ displaystyle 1 {\ bar {1}} 11 _ {\ mathcal {D}} = 8-4 + 2 + 1 = 7}
- 100 1 ¯ D знак равно 8 — 1 знак равно 7 {\ displaystyle 100 {\ bar {1}} _ {\ mathcal {D}} = 8-1 = 7}
Несмежная форма (НВС) кодирований Бута действительно гарантирует уникальное представление для каждого целого значения. Однако это применимо только к целочисленным значениям. Например, рассмотрим следующие числа в NAF:
- 2 3 знак равно 10 ¯ D знак равно 1. 1 ¯ ¯ D {\ displaystyle {\ frac {2} {3}} = 0. {\ overline {10}} _ {\ mathcal {D}} = 1. {\ overline {0 {\ bar {1}}}} _ { \ mathcal {D}}}
Вещественные числа
Микропроцессор не содержит средства для работы с вещественными числами. В системе команд микропроцессора отсутствуют команды для арифметических операций с вещественными числами.
Такие средства (команды) содержатся в математическом (арифметическом) сопроцессоре — специальном устройстве, предназначенном для обработки вещественных чисел. В реальности микропроцессор взаимодействует с сопроцессором, посылая ему запросы на выполнение операций с вещественными числами и принимая ответы.
Однако программирование сопроцессора — достаточно сложная задача, требующая специальных знаний, и в курсе «Основы программирования» нами не рассматривается.
Поэтому ограничимся знаниями и практическими навыками работы с целыми числами.
База −2
В обычных двоичных системах счисления основание или основание, равно 2; таким образом, крайний правый бит представляет 2, следующий бит представляет 21, следующий бит 22, и так далее. Однако возможна и двоичная система счисления с основанием −2. Крайний правый бит представляет (−2) = +1, следующий бит представляет (−2)1 = −2, следующий бит (−2)2 = +4 и так далее с переменным знаком. Числа, которые могут быть представлены четырьмя битами, показаны в сравнительной таблице ниже.
Диапазон чисел, которые могут быть представлены, асимметричен. Если слово имеет четное число битов, величина наибольшего отрицательного числа, которое может быть представлено, вдвое больше, чем наибольшее положительное число, которое может быть представлено, и наоборот, если слово имеет нечетное число битов.
История
Первые дни цифровых вычислений были отмечены множеством конкурирующих идей как в отношении аппаратных технологий, так и математических технологий (систем счисления). Одним из самых больших споров был формат отрицательных чисел, когда некоторые из самых опытных людей той эпохи имели очень сильные и разные мнения.[нужна цитата] Поддерживается один лагерь два дополнения, система, которая сегодня доминирует. Другой лагерь поддерживал дополнение, где любое положительное значение превращается в его отрицательный эквивалент путем инвертирования всех битов в слове. Третья группа поддерживает «знак и величина» (знак-величина), где значение изменяется с положительного на отрицательное просто путем переключения бита знака (старшего разряда) слова.
Были аргументы за и против каждой из систем. Знак и величина позволили упростить отслеживание дампов памяти (распространенный процесс в 1960-х годах), поскольку для небольших числовых значений используется меньше 1 бит. Внутри этих систем выполнялась математика с дополнением до единиц, поэтому числа нужно было преобразовать в значения с дополнением до единиц, когда они были переданы из регистра в математический блок, а затем преобразовать обратно в знаковую величину, когда результат был передан обратно в регистр. Электронике требовалось больше вентилей, чем другим системам, что было ключевой проблемой, когда стоимость и упаковка дискретных транзисторов были критическими. IBM была одним из первых сторонников знаковой величины. , и 709x компьютеры серии, пожалуй, самые известные системы, использующие его.
Их дополнение позволяло создавать несколько более простые конструкции оборудования, поскольку не было необходимости преобразовывать значения при передаче в математический модуль и из него. Но он также разделял нежелательную характеристику величины знака — способность представлять отрицательный ноль (-0). Отрицательный ноль ведет себя точно так же, как положительный ноль; при использовании в качестве операнда в любом вычислении результат будет одинаковым независимо от того, является ли операнд положительным или отрицательным нулем. Однако недостатком является то, что наличие двух форм одного и того же значения требует двух, а не одного сравнения при проверке равенства нулю. Вычитание дополнения может также привести к конечный заем (описано ниже). Можно утверждать, что это усложняет логику сложения / вычитания или упрощает ее, поскольку вычитание требует простого инвертирования битов второго операнда при его передаче в сумматор. В PDP-1, CDC 160 серии, CDC 3000 серии, CDC 6000 серии, UNIVAC 1100 серии и LINC компьютерное использование представления дополнения.
Дополнение до двух проще всего реализовать на оборудовании, что может быть основной причиной его широкой популярности. Процессоры на ранних мэйнфреймах часто состояли из тысяч транзисторов — устранение значительного количества транзисторов было значительной экономией. Мэйнфреймы, такие как IBM System / 360, то GE-600 серия, и PDP-6 и PDP-10 используйте дополнение до двух, как и миникомпьютеры, такие как PDP-5 и PDP-8 и PDP-11 и VAX. Архитекторы первых процессоров на базе интегральных схем (Intel 8080и т.д.) решили использовать математику с дополнением до двух. По мере развития технологии ИС практически все использовали технологию дополнения до двух. x86,m68k, Питание ISA,MIPS, SPARC, РУКА, Itanium, PA-RISC, и DEC Alpha процессоры дополняют друг друга.
Другие системы
Google Буферы протокола «зигзагообразное кодирование» — это система, аналогичная системе «знак и величина», но с использованием младший бит для представления знака и имеет единственное представление нуля. Это позволяет количество переменной длины кодирование, предназначенное для неотрицательных (беззнаковых) целых чисел, которое эффективно используется для целых чисел со знаком.
Другой подход — дать каждому цифра знак, дающий представление цифр со знаком. Например, в 1726 г. Джон Колсон выступал за сокращение выражений до «маленьких чисел», цифр 1, 2, 3, 4 и 5. В 1840 г. Огюстен Коши также выразил предпочтение таким модифицированным десятичным числам для уменьшения ошибок в вычислениях.
Two’s complement[edit]
Binary value | Two’s complement interpretation | Unsigned interpretation |
---|---|---|
00000000 | ||
00000001 | 1 | 1 |
⋮ | ⋮ | ⋮ |
01111110 | 126 | 126 |
01111111 | 127 | 127 |
10000000 | −128 | 128 |
10000001 | −127 | 129 |
10000010 | −126 | 130 |
⋮ | ⋮ | ⋮ |
11111110 | −2 | 254 |
11111111 | −1 | 255 |
The problems of multiple representations of 0 and the need for the end-around carry are circumvented by a system called two’s complement. In two’s complement, negative numbers are represented by the bit pattern which is one greater (in an unsigned sense) than the ones’ complement of the positive value.
In two’s-complement, there is only one zero, represented as 00000000. Negating a number (whether negative or positive) is done by inverting all the bits and then adding one to that result. This actually reflects the ring structure on all integers modulo 2N: Z2NZ{\displaystyle \mathbb {Z} /2^{N}\mathbb {Z} }. Addition of a pair of two’s-complement integers is the same as addition of a pair of unsigned numbers (except for detection of overflow, if that is done); the same is true for subtraction and even for N lowest significant bits of a product (value of multiplication). For instance, a two’s-complement addition of 127 and −128 gives the same binary bit pattern as an unsigned addition of 127 and 128, as can be seen from the 8-bit two’s complement table.
An easier method to get the negation of a number in two’s complement is as follows:
Example 1 | Example 2 | |
---|---|---|
1. Starting from the right, find the first «1» | 00101001 | 00101100 |
2. Invert all of the bits to the left of that «1» | 11010111 | 11010100 |
Method two:
- Invert all the bits through the number
- Add one
Example: for +2, which is 00000010 in binary (the ~ character is the C bitwise NOT operator, so ~X means «invert all the bits in X»):
- ~00000010 → 11111101
- 11111101 + 1 → 11111110 (−2 in two’s complement)
Основные понятия и положения
Прежде чем начать разбираться в теме, следует понимать, что все ЭВМ, на данный момент времени, работают с двоичной системой счисления. Это значит, что и вся информация (звуковая, графическая или текстовая) хранится в памяти ПК в виде последовательностей нулей и единиц.
Схематично компьютерная память выглядит так, как показано на схеме ниже:
Как видно из рисунка внутренняя память представляет собой разряды, каждый из которых содержит один бит информации (0 или 1). А восемь битовых кластеров образуют один байт (машинное слово).
Машинное слово – минимально адресуемая ячейка памяти, которую за раз можно обработать командой процессора. То есть минимально процессор может обработать один байт.
Отсюда также вытекает правило, что данные в компьютере представляются дискретно (отдельно). В качестве примера приведем изображение на мониторе. Оно состоит из точек (пикселей). Цвет же каждой точки задается последовательностью из 0 и 1.
Алгоритм представления числа с плавающей запятой.
- Перевести число из p-ичной системы счисления в двоичную;
- представить двоичное число в нормализованной экспоненциальной форме;
- рассчитать смещённый порядок числа;
- разместить знак, порядок и мантиссу в соответствующие разряды сетки.
Пример: Представить число -25,625 в машинном виде с использованием 4 байтового представления (где 1 бит отводится под знак числа, 8 бит – под смещённый порядок, остальные биты – под мантиссу).
2510=10001120,62510=0,1012-25,62510= -100011,10122. -100011,1012 = -1,000111012 * 2 4 3. СП=127+4=131 4.
Можно заметить, что представление действительного числа не очень удобно изображать в двоичной системе, поэтому часто используют шестнадцатеричное представление:
Окончательный ответ: C1CD0000.
База −2
В обычных двоичных системах счисления основание или основание системы счисления равно 2; таким образом, крайний правый бит представляет 2 , следующий бит представляет 2 1 , следующий бит 2 2 и так далее. Однако возможна и двоичная система счисления с основанием −2. Самый правый бит представляет (-2) = +1 , следующий бит представляет (-2) 1 = -2 , следующий бит (-2) 2 = +4 и так далее, с переменным знаком. Числа, которые могут быть представлены четырьмя битами, показаны в сравнительной таблице ниже.
Диапазон чисел, которые могут быть представлены, асимметричен. Если слово имеет четное число битов, величина наибольшего отрицательного числа, которое может быть представлено, вдвое больше, чем наибольшее положительное число, которое может быть представлено, и наоборот, если слово имеет нечетное число битов.
Прямой код[править]
Нумерация двоичных чисел в прямом представлении
При записи числа в прямом коде (англ. Signed magnitude representation) старший разряд является знаковым разрядом. Если его значение равно нулю, то представлено положительное число или положительный ноль, если единице, то представлено отрицательное число или отрицательный ноль. В остальных разрядах (которые называются цифровыми) записывается двоичное представление модуля числа. Например, число в восьмибитном типе данных, использующем прямой код, будет выглядеть так: .
Таким способом в -битовом типе данных можно представить диапазон чисел .
Достоинства представления чисел с помощью прямого кодаправить
- Получить прямой код числа достаточно просто.
- Из-за того, что обозначает , коды положительных чисел относительно беззнакового кодирования остаются неизменными.
- Количество положительных чисел равно количеству отрицательных.
Недостатки представления чисел с помощью прямого кодаправить
- Выполнение арифметических операций с отрицательными числами требует усложнения архитектуры центрального процессора (например, для вычитания невозможно использовать сумматор, необходима отдельная схема для этого).
- Существуют два нуля: и , из-за чего усложняется арифметическое сравнение.
Из-за весьма существенных недостатков прямой код используется очень редко.
Представление целых чисел в дополнительном коде
Другой способ представления целых чисел дополнительный код. Диапазон значений величин зависит от количества бит памяти, отведенных для их хранения. Например, величины типа Integer (все названия типов данных здесь и ниже представлены в том виде, в каком они приняты в языке программирования Turbo Pascal. В других языках такие типы данных тоже есть, но могут иметь другие названия) лежат в диапазоне от -32768 (-215) до 32767 (215 — 1) и для их хранения отводится 2 байта (16 бит); типа LongInt в диапазоне от -231 до 231 — 1 и размещаются в 4 байтах (32 бита); типа Word в диапазоне от 0 до 65535 (216 — 1) (используется 2 байта) и т.д.
Как видно из примеров, данные могут быть интерпретированы как числа со знаком, так и без знака. В случае представления величины со знаком самый левый (старший) разряд указывает на положительное число, если содержит нуль, и на отрицательное, если единицу.
Вообще, разряды нумеруются справа налево, начиная с 0. Ниже показана нумерация бит в двухбайтовом машинном слове.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Дополнительный код положительного числа совпадает с его прямым кодом.
Прямой код целого числа может быть получен следующим образом: число
переводится в двоичную систему счисления, а затем его двоичную запись
слева дополняют таким количеством незначащих нулей, сколько требует тип
данных, к которому принадлежит число.
Например, если число 37(10) =
100101(2) объявлено величиной типа Integer (шестнадцатибитовое со знаком), то его прямым кодом будет
0000000000100101, а если величиной типа LongInt (тридцатидвухбитовое со знаком), то его прямой код будет
00000000000000000000000000100101. Для более компактной записи чаще
используют шестнадцатеричное представление кода. Полученные коды можно переписать
соответственно как 0025(16) и 00000025(16).
Дополнительный код целого отрицательного числа может быть получен по
следующему алгоритму:
- записать прямой код модуля числа;
- инвертировать его (заменить единицы нулями, нули единицами);
- прибавить к инверсному коду единицу.
Например, запишем дополнительный код числа -37, интерпретируя его как
величину типа LongInt (тридцатидвухбитовое со знаком):
- прямой код числа 37 есть 00000000000000000000000000100101;
- инверсный код 11111111111111111111111111011010;
- дополнительный код 11111111111111111111111111011011 или
FFFFFFDB(16).
При получении числа по его дополнительному коду прежде всего необходимо
определить его знак. Если число окажется положительным, то просто
перевести его код в десятичную систему счисления. В случае отрицательного
числа необходимо выполнить следующий алгоритм:
- вычесть из кода числа 1;
- инвертировать код;
- перевести в десятичную систему счисления. Полученное число записать со
знаком минус.
Примеры. Запишем числа, соответствующие дополнительным
кодам:
- 0000000000010111. Поскольку в старшем разряде записан нуль, то
результат будет положительным. Это код числа 23. - 1111111111000000. Здесь записан код отрицательного числа. Исполняем алгоритм:
1) 1111111111000000(2) — 1(2) = 1111111110111111(2); 2) 0000000001000000;
3) 1000000(2) = 64(10).
Ответ: -64.
Нормализованная запись числа.
Нормализованная запись отличного от нуля действительного числа – это запись вида a= m*P q , где q – целое число (положительное, отрицательное или ноль), а m – правильная P-ичная дробь, у которой первая цифра после запятой не равна нулю, то есть . При этом m называется мантиссой числа, q – порядком числа.
Примеры:
- 3,1415926 = 0, 31415926 * 10 1 ;
- 1000=0,1 * 10 4 ;
- 0,123456789 = 0,123456789 * 10 0 ;
- 0,00001078 = 0,1078 * 8 -4 ; (порядок записан в 10-й системе)
- 1000,00012 = 0, 100000012 * 2 4 .
Так как число ноль не может быть записано в нормализованной форме в том виде, в каком она была определена, то считаем, что нормализованная запись нуля в 10-й системе будет такой: 0 = 0,0 * 10 0 .
Нормализованная экспоненциальная запись числа – это запись вида a= m*P q , где q – целое число (положительное, отрицательное или ноль), а m – P-ичная дробь, у которой целая часть состоит из одной цифры. При этом (m-целая часть) называется мантиссой числа, q – порядком числа.
Алгоритм перевода чисел из одной системы счисления в другую
Пример №1.
Перевод из 2 в 8 в 16 системы счисления.
Эти системы кратны двум, следовательно, перевод осуществляется с использованием таблицы соответствия (см. ниже).
Для перевода числа из двоичной системы счисления в восьмиричную (шестнадцатиричную) необходимо от запятой вправо и влево разбить двоичное число на группы по три (четыре – для шестнадцатиричной) разряда, дополняя при необходимости нулями крайние группы. Каждую группу заменяют соответствующей восьмиричной или шестнадцатиричной цифрой.
Пример №2. 1010111010,1011 = 1.010.111.010,101.1 = 1272,548здесь 001=1; 010=2; 111=7; 010=2; 101=5; 100=4
При переводе в шестнадцатеричную систему необходимо делить число на части, по четыре цифры, соблюдая те же правила.
Пример №3. 1010111010,1011 = 10.1011.1010,1011 = 2B12,13HEXздесь 0010=2; 1011=B; 1010=12; 1011=13
Перевод чисел из 2, 8 и 16 в десятичную систему исчисления производят путем разбивания числа на отдельные и умножения его на основание системы (из которой переводится число) возведенное в степень соответствующую его порядковому номеру в переводимом числе. При этом числа нумеруются влево от запятой (первое число имеет номер 0) с возрастанием, а в правую сторону с убыванием (т.е. с отрицательным знаком). Полученные результаты складываются.
Пример №4.
Пример перевода из двоичной в десятичную систему счисления.
1010010,1012 = 1·26+0·25+1·24+0·23+0·22+1·21+0·2 + 1·2-1+0·2-2+1·2-3 = = 64+0+16+0+0+2+0+0.5+0+0.125 = 82.62510
108.58 = 1*·82+0·81+8·8 + 5·8-1 = 64+0+8+0.625 = 72.62510
108.516 = 1·162+0·161+8·16 + 5·16-1 = 256+0+8+0.3125 = 264.312510
Еще раз повторим алгоритм перевода чисел из одной системы счисления в другую ПСС
- Из десятичной системы счисления:
- разделить число на основание переводимой системы счисления;
- найти остаток от деления целой части числа;
- записать все остатки от деления в обратном порядке;
- Из двоичной системы счисления
- Для перевода в десятичную систему счисления необходимо найти сумму произведений основания 2 на соответствующую степень разряда;
- Для перевода числа в восьмеричную необходимо разбить число на триады.
Например, 1000110 = 1 000 110 = 1068 - Для перевода числа из двоичной системы счисления в шестнадцатеричную необходимо разбить число на группы по 4 разряда.
Например, 1000110 = 100 0110 = 4616
Позиционной называется система
Двоичная СС | Шестнадцатеричная СС |
0000 | |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
Таблица для перевода в восьмеричную систему счисления
Двоичная СС | Восьмеричная СС |
000 | |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Пример №5. Перевести число 100,12 из десятичной системы счисления в восьмеричную систему счисления и обратно. Пояснить причины расхождений.
Решение.
1 Этап. Перевод числа из десятичной системы счисления в восьмеричную систему счисления.
Целая часть от деления | Остаток от деления |
100 div 8 = 12 | 100 mod 8 = 4 |
Остаток от деления записываем в обратном порядке. Получаем число в 8-ой системе счисления: 144
100 = 1448
Для перевода дробной части числа последовательно умножаем дробную часть на основание 8. В результате каждый раз записываем целую часть произведения.
0.12*8 = 0.96 (целая часть )0.96*8 = 7.68 (целая часть 7)
0.68*8 = 5.44 (целая часть 5)0.44*8 = 3.52 (целая часть 3)
Получаем число в 8-ой системе счисления: 0753.
0.12 = 0.7538
100,1210 = 144,07538
2 Этап. Перевод числа из десятичной системы счисления в восьмеричную систему счисления.
Обратный перевод из восьмеричной системы счислений в десятичную.
Для перевода целой части необходимо умножить разряд числа на соответствующую ему степень разряда.
144 = 82*1 + 81*4 + 8*4 = 64 + 32 + 4 = 100
Для перевода дробной части необходимо разделить разряд числа на соответствующую ему степень разряда
0753 = 8-1*0 + 8-2*7 + 8-3*5 + 8-4*3 = 0.119873046875 = 0.1199
144,07538 = 100,119910 ≈ 100,1210Разница в 0,0001 (100,12 — 100,1199) объясняется погрешностью округлений при переводе в восьмеричную систему счислений. Эту погрешность можно уменьшить, если взять большее число разрядов (например, не 4, а 8).
References[edit]
- ^ Choo, Hunsoo; Muhammad, K.; Roy, K. (February 2003). «Two’s complement computation sharing multiplier and its applications to high performance DFE». IEEE Transactions on Signal Processing. 51 (2): 458–469. doi:10.1109/TSP.2002.806984.
- ^ GE-625 / 635 Programming Reference Manual. General Electric. January 1966. Retrieved August 15, 2013.
- ^ Intel 64 and IA-32 Architectures Software Developer’s Manual . Intel. Section 4.2.1. Retrieved August 6, 2013.
- ^ Power ISA Version 2.07. Power.org. Section 1.4. Retrieved August 6, 2013.,
- ^ Bacon, Jason W. (2010–2011). «Computer Science 315 Lecture Notes». Retrieved 21 February 2020.
- ^ US 4484301, «Array multiplier operating in one’s complement format», issued 1981-03-10
- ^ US 6760440, «One’s complement cryptographic combiner», issued 1999-12-11
- ^ Shedletsky, John J. (1977). «Comment on the Sequential and Indeterminate Behavior of an End-Around-Carry Adder». IEEE Transactions on Computers. 26 (3): 271–272. doi:10.1109/TC.1977.1674817.
- ^ Donald Knuth: The Art of Computer Programming, Volume 2: Seminumerical Algorithms, chapter 4.1
- ^ Thomas Finley (April 2000). «Two’s Complement». Cornell University. Retrieved 15 September 2015.
- ^ Protocol Buffers: Signed Integers
- Ivan Flores, The Logic of Computer Arithmetic, Prentice-Hall (1963)
- Israel Koren, Computer Arithmetic Algorithms, A.K. Peters (2002), ISBN 1-56881-160-8
Смещение двоичное
Двоичное значение | Интерпретация Excess-128 | Неподписанная интерпретация |
---|---|---|
00000000 | −128 | |
00000001 | −127 | 1 |
⋮ | ⋮ | ⋮ |
01111111 | −1 | 127 |
10000000 | 128 | |
10000001 | 1 | 129 |
⋮ | ⋮ | ⋮ |
11111111 | +127 | 255 |
В двоичном смещении (также называемом избыточным- K или смещенным представлением) число n со знаком представлено битовой комбинацией, соответствующей беззнаковому числу n + K , где K является значением смещения или смещением . Таким образом, 0 представлен как K , а -K представлен битовой комбинацией с нулевыми значениями. Это можно рассматривать как небольшую модификацию и обобщение вышеупомянутого дополнения до двух, которое фактически является представлением с избытком (2 N -1 ) с инвертированным старшим значащим битом .
Смещенные представления теперь в основном используются для экспоненты чисел с плавающей запятой . Стандарт IEEE 754 с плавающей запятой определяет поле экспоненты для числа с одинарной точностью (32-битное) как 8-битное поле с избыточностью 127 . Поле экспоненты с двойной точностью (64-битное) представляет собой 11-битное поле с превышением 1023 ; см. смещение экспоненты . Он также использовался для двоичных десятичных чисел в качестве лишнего-3 .
Base −2[edit]
In conventional binary number systems, the base, or radix, is 2; thus the rightmost bit represents 2, the next bit represents 21, the next bit 22, and so on. However, a binary number system with base −2 is also possible.
The rightmost bit represents (−2) = +1, the next bit represents (−2)1 = −2, the next bit (−2)2 = +4 and so on, with alternating sign. The numbers that can be represented with four bits are shown in the comparison table below.
The range of numbers that can be represented is asymmetric. If the word has an even number of bits, the magnitude of the largest negative number that can be represented is twice as large as the largest positive number that can be represented, and vice versa if the word has an odd number of bits.
Другие системы
«Зигзагообразное кодирование» буферов протокола Google — это система, аналогичная системе «знак и величина», но в которой для представления знака используется младший бит, и он имеет единственное представление нуля. Это позволяет эффективно использовать количественное кодирование переменной длины, предназначенное для неотрицательных (беззнаковых) целых чисел, для целых чисел со знаком.
Другой подход состоит в том, чтобы дать каждой цифре знак, что дает представление цифры со знаком . Например, в 1726 году Джон Колсон выступал за сокращение выражений до «малых чисел», цифр 1, 2, 3, 4 и 5. В 1840 году Огюстен Коши также выразил предпочтение таким модифицированным десятичным числам для уменьшения ошибок в вычислениях.