Оглавление
Кодирование вещественных чисел
Несколько иной способ применяется для представления в памяти
персонального компьютера действительных чисел. Рассмотрим представление
величин с плавающей точкой.
Любое действительное число можно записать в стандартном виде M × 10p,
где 1 £ M p целое. Например, 120100000 = 1,201 × 108. Поскольку
каждая позиция десятичного числа отличается от соседней на степень числа
10, умножение на 10 эквивалентно сдвигу десятичной запятой на одну позицию
вправо. Аналогично деление на 10 сдвигает десятичную запятую на позицию
влево. Поэтому приведенный выше пример можно продолжить: 120100000 = 1,201 × 108 = 0,1201 × 109 = 12,01 × 107. Десятичная запятая «плавает» в числе
и больше не помечает абсолютное место между целой и дробной частями.
В приведенной выше записи M называют мантиссой числа, а p его
порядком. Для того чтобы сохранить максимальную точность, вычислительные
машины почти всегда хранят мантиссу в нормализованном виде, что означает,
что мантисса в данном случае есть число, лежащее между 1(10) и 2(10) (1 £ M
Современный персональный компьютер
позволяет работать со следующими действительными типами (диапазон значений
указан по абсолютной величине; в некоторых случаях перечень типов данных может быть расширен):
Тип | Диапазон | Мантисса | Байты |
---|---|---|---|
Real | 2,9×10-39..1,7×1038 | 11-12 | 6 |
Single | 1,5×10-45..3,4×1038 | 7-8 | 4 |
Double | 5,0×10-324..1,7×10308 | 15-16 | 8 |
Extended | 3,4×10-4932..1,1×104932 | 19-20 | 10 |
Покажем преобразование действительного числа для представления его в
памяти ЭВМ на примере величины типа Double.
Как видно из таблицы, величина это типа занимает в памяти 8 байт. На
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):
S | Смещенный порядок | Мантисса |
63 | 62..52 | 51..0 |
Можно заметить, что старший бит, отведенный под мантиссу, имеет номер
51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на
положение двоичной запятой. Перед запятой должен стоять бит целой части
мантиссы, но поскольку она всегда равна 1, здесь данный бит не требуется и
соответствующий разряд отсутствует в памяти (но он подразумевается).
Значение порядка хранится здесь не как целое число, представленное в
дополнительном коде. Для упрощения вычислений и сравнения действительных
чисел значение порядка в ЭВМ хранится в виде смещенного числа, т.е. к
настоящему значению порядка перед записью его в память прибавляется
смещение. Смещение выбирается так, чтобы минимальному значению порядка
соответствовал нуль. Например, для типа Double порядок занимает 11 бит и
имеет диапазон от 2-1023 до 21023, поэтому смещение равно 1023(10) =
1111111111(2). Наконец, бит с номером 63 указывает на знак числа.
Таким образом, из вышесказанного вытекает следующий алгоритм для
получения представления действительного числа в памяти ЭВМ:
- перевести модуль данного числа в двоичную систему счисления;
- нормализовать двоичное число, т.е. записать в виде M × 2p, где M
мантисса (ее целая часть равна 1(2)) и p порядок, записанный в
десятичной системе счисления; - прибавить к порядку смещение и перевести смещенный порядок в двоичную
систему счисления; - учитывая знак заданного числа (0 положительное; 1 отрицательное),
выписать его представление в памяти ЭВМ.
Пример. Запишем код числа -312,3125.
- Двоичная запись модуля этого числа имеет вид 100111000,0101.
- Имеем 100111000,0101 =
1,001110000101 × 28. - Получаем смещенный порядок 8 + 1023 = 1031. Далее имеем
1031(10) = 10000000111(2). - Окончательно
1 10000000111 0011100001010000000000000000000000000000000000000000 63 62..52 51..0
Очевидно, что более компактно полученный код стоит записать следующим
образом: C073850000000000(16).
Другой пример иллюстрирует обратный переход от кода действительного
числа к самому числу.
Пример. Пусть дан код 3FEC600000000000(16) или
01111111110 | 1100011000000000000000000000000000000000000000000000 | |
63 | 62..52 | 51..0 |
- Прежде всего замечаем, что это код положительного числа, поскольку в
разряде с номером 63 записан нуль. Получим порядок этого числа:
01111111110(2) = 1022(10); 1022 — 1023 = -1. - Число имеет вид 1,1100011 × 2-1 или
0,11100011. - Переводом в десятичную систему счисления получаем 0,88671875.
Можно проверить себя:
Онлайн преобразователь для IEEE 754 чисел с двойной точностью
См. также стандарт IEEE 754
Контрольная работа по предсталению информации в памяти ЭВМ
А.П. Шестаков, 1999-2009
Сайт создан в системе uCoz
Письменным и устным языком
В устной и письменной формах чисел на языке пенджаби используется форма отрицательного числа, записанная как una или un . Это отрицательное число используется для образования 19, 29,…, 89 из корня для 20, 30,…, 90. Явно вот числа:
- 19 унни, 20 вих, 21 икки
- 29 унатти, 30 ти, 31 икатти
- 39 унтали, 40 чали, 41 иктали
- 49 унанджа, 50 панджах, 51 икваня
- 59 унахат, 60 сат, 61 икахат
- 69 унаттар, 70 саттар, 71 ихаттар
- 79 унаси, 80 асси, 81 икиаси
- 89 unanve, 90 nabbe, 91 ikinnaven.
Точно так же язык сесото использует отрицательные числа для образования восьмерок и девяток.
- 8 robeli (/ Ro-bay-dee /), что означает «сломать два», то есть двумя пальцами вниз
- 9. Робонг (/ Ro-bong /), что означает «сломать один», то есть на один палец вниз.
Классическая латынь — Древний Рим
В классической латыни у целых чисел 18 и 19 даже не было ни устной, ни письменной формы, включая соответствующие части для «восьмерки» или «девятки» на практике — несмотря на то, что они существовали. Вместо этого на классической латыни
- 18 = duodēvīgintī («два взятых из двадцати»), (IIXX или XIIX),
- 19 = ūndēvīgintī («один взятый из двадцати»), (IXX или XIX)
- 20 = vīgintī («двадцать»), (XX).
Для будущих целых чисел аддитивная форма в языке была гораздо более распространенной, однако для перечисленных чисел все же предпочтительной была форма, указанная выше. Следовательно, приближаясь к тридцати, числа выражались как:
- 28 = duodētrīgintā («два взятых из тридцати»), реже также vīgintī octō / octō et vīgintī («двадцать восемь / восемь и двадцать»), (IIXXX или XXIIX против XXVIII, последний был полностью побежден).
- 29 = ūndētrīgintā («взятый из тридцати»), несмотря на то, что менее предпочтительная форма также была в их распоряжении.
Это одна из основных основ рассуждений современных историков, объясняющая, почему вычитающие I- и II- были так распространены в этом диапазоне кардиналов по сравнению с другими диапазонами. Цифры 98 и 99 также могут быть выражены в обеих формах, но «от двух до ста» могло показаться немного странным — явным доказательством является то, что эти числа редко встречаются в достоверных источниках.
На финском языке
Есть еще один язык, имеющий эту функцию (пока только в виде трассировки), но все еще активно используемый сегодня. Это финский язык , где (прописанные) цифры используются таким образом, если встречается цифра 8 или 9. Схема такая:
1 = «yksi» (Примечание: yhd- или yht- в основном, когда собираются отклонить; например, «yhdessä» = «вместе, как одно «)
2 = «kaksi» (также обратите внимание: kahde-, kahte- при отклонении)
3 = «колме»
4 = «neljä»
…
- 7 = «seitsemän»
- 8 = «ках (д) ексан» (осталось два )
- 9 = «yh (d) eksän» (один остался )
- 10 = «кимменен» (десять)
Вышеприведенный список не является особым случаем, следовательно, он также появляется у более крупных кардиналов, например:
399 = «kolmesataayhdeksänkymmentäyhdeksän»
Подчеркивание этих атрибутов присутствует даже в самых коротких разговорных формах числительных:
- 1 = «гг»
- 2 = «каа»
- 3 = «ку»
…
- 7 = «сейска»
- 8 = «каси»
- 9 = «ysi»
- 10 = «кимппи»
Однако это явление не влияет на письменные цифры, финны используют стандартную западно-арабскую десятичную систему счисления.
В английском языке время обычно обозначается как, например, «семь til three», «til», выполняя отрицание.
История [ править ]
Первые дни цифровых вычислений были отмечены множеством конкурирующих идей, касающихся как аппаратных технологий, так и математических технологий (систем счисления). Одним из самых больших споров был формат отрицательных чисел, некоторые из ведущих экспертов эпохи имели очень сильные и разные мнения. [ необходима цитата ] Один лагерь поддерживал два дополнения , систему, которая сегодня доминирует. Другой лагерь поддерживал дополнение, где любое положительное значение превращается в его отрицательный эквивалент путем инвертирования всех битов в слове. Третья группа поддерживает «знак и величину» (знак-величина), где значение изменяется с положительного на отрицательное просто путем переключения бита знака (старшего разряда) слова.
Были аргументы за и против каждой из систем. Знак и величина позволили упростить отслеживание дампов памяти (распространенный процесс в 1960-х годах), поскольку для небольших числовых значений используется меньше 1 бит. Внутри этих систем выполнялась математика с дополнением единиц, поэтому числа должны были быть преобразованы в значения дополнения единиц, когда они были переданы из регистра в математический блок, а затем преобразованы обратно в знаковую величину, когда результат был передан обратно в регистр. Электронике требовалось больше вентилей, чем другим системам, что было ключевой проблемой, когда стоимость и упаковка дискретных транзисторов были критическими. IBM была одним из первых сторонников знаковой величины, и их компьютеры серий , и 709x были, пожалуй, самыми известными системами, в которых она использовалась.
Их дополнение позволило несколько упростить конструкцию оборудования, поскольку не было необходимости преобразовывать значения при передаче в математический блок и из него. Но у него также есть нежелательная характеристика со знаком-величиной — способность представлять отрицательный ноль (-0). Отрицательный ноль ведет себя точно так же, как положительный ноль; при использовании в качестве операнда в любом вычислении результат будет одинаковым независимо от того, является ли операнд положительным или отрицательным нулем. Однако недостатком является то, что наличие двух форм одного и того же значения требует двух, а не одного сравнения при проверке равенства нулю. Вычитание дополнительных элементов также может привести к заимствованию на конец периода.(описано ниже). Можно утверждать, что это усложняет логику сложения / вычитания или упрощает ее, поскольку вычитание требует простого инвертирования битов второго операнда при его передаче в сумматор. PDP-1 , CDC 160 серии , CDC 3000 серии, CDC серии 6000 , UNIVAC 1100 серии, а также ЛИНК дополнение представление компьютера использовать поразрядное.
Дополнение до двух проще всего реализовать на оборудовании, что может быть основной причиной его широкой популярности. Процессоры на ранних мэйнфреймах часто состояли из тысяч транзисторов — устранение значительного количества транзисторов было значительной экономией. Мэйнфреймы , такие как IBM System / 360 , в серии GE-600 , и PDP-6 и PDP-10 использовать два с дополнением, как и миникомпьютеры , такие , как PDP-5 и PDP-8 и PDP-11 и VAX . Архитекторы первых процессоров на базе интегральных схем ( Intel 8080и т. д.) решили использовать математику с дополнением до двух. По мере развития технологии ИС практически все использовали технологию дополнения до двух. Процессоры x86 , m68k , Power ISA , MIPS , SPARC , ARM , Itanium , PA-RISC и DEC Alpha дополняют друг друга.
История
Первые дни цифровых вычислений были отмечены множеством конкурирующих идей как в отношении аппаратных технологий, так и математических технологий (систем счисления). Одним из самых больших споров был формат отрицательных чисел, когда некоторые из самых опытных людей той эпохи имели очень сильные и разные мнения.[нужна цитата] Поддерживается один лагерь два дополнения, система, которая сегодня доминирует. Другой лагерь поддерживал дополнение, где любое положительное значение превращается в его отрицательный эквивалент путем инвертирования всех битов в слове. Третья группа поддерживает «знак и величина» (знак-величина), где значение изменяется с положительного на отрицательное просто путем переключения бита знака (старшего разряда) слова.
Были аргументы за и против каждой из систем. Знак и величина позволили упростить отслеживание дампов памяти (распространенный процесс в 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 процессоры дополняют друг друга.
Перевод чисел из десятичной системы счисления в другую систему счисления
Для перевода чисел из десятичной системы счисления в другую систему счисления нужно переводить отдельно целую часть числа и дробную часть числа.
Целую часть числа переводится из десятичной СС в другую систему счисления — последовательным делением целой части числа на основание системы счисления (для двоичной СС — на 2, для 8-ичной СС — на 8, для 16-ичной — на 16 и т.д.) до получения целого остатка, меньше, чем основание СС.
Пример 4. Переведем число 159 из десятичной СС в двоичную СС:
159 | 2 | ||||||
158 | 79 | 2 | |||||
1 | 78 | 39 | 2 | ||||
1 | 38 | 19 | 2 | ||||
1 | 18 | 9 | 2 | ||||
1 | 8 | 4 | 2 | ||||
1 | 4 | 2 | 2 | ||||
2 | 1 |
Рис. 1
Как видно из Рис. 1, число 159 при делении на 2 дает частное 79 и остаток 1. Далее число 79 при делении на 2 дает частное 39 и остаток 1 и т.д. В результате построив число из остатков деления (справа налево) получим число в двоичной СС: 10011111. Следовательно можно записать:
Пример 5. Переведем число 615 из десятичной СС в восьмеричную СС.
615 | 8 | ||
608 | 76 | 8 | |
7 | 72 | 9 | 8 |
4 | 8 | 1 | |
1 |
Рис. 2
При приведении числа из десятичной СС в восьмеричную СС, нужно последовательно делить число на 8, пока не получится целый остаток меньшее, чем 8. В результате построив число из остатков деления (справа налево) получим число в восьмеричной СС: 1147(см. Рис. 2). Следовательно можно записать:
Пример 6. Переведем число 19673 из десятичной системы счисления в шестнадцатеричную СС.
19673 | 16 | ||
19664 | 1229 | 16 | |
9 | 1216 | 76 | 16 |
13 | 64 | 4 | |
12 |
Рис. 3
Как видно из рисунка Рис.3, последовательным делением числа 19673 на 16 получили остатки 4, 12, 13, 9. В шестнадцатеричной системе счисления числе 12 соответствует С, числе 13 — D. Следовательно наше шестнадцатеричное число — это 4CD9.
Далее рассмотрим перевод правильных десятичных дробей в двоичную СС, в восьмеричную СС, в шестнадцатеричную СС и т.д.
Для перевода правильных десятичных дробей (вещественное число с нулевой целой частью) в систему счисления с основанием s необходимо данное число последовательно умножить на s до тех пор, пока в дробной части не получится чистый нуль, или же не получим требуемое количество разрядов. Если при умножении получится число с целой частью, отличное от нуля, то эту целую часть не учитывать (они последовательно зачисливаются в результат).
Рассмотрим вышеизложенное на примерах.
Пример 7. Переведем число 0.214 из десятичной системы счисления в двоичную СС.
0.214 | ||
x | 2 | |
0.428 | ||
x | 2 | |
0.856 | ||
x | 2 | |
1 | 0.712 | |
x | 2 | |
1 | 0.424 | |
x | 2 | |
0.848 | ||
x | 2 | |
1 | 0.696 | |
x | 2 | |
1 | 0.392 |
Рис. 4
Как видно из Рис.4, число 0.214 последовательно умножается на 2. Если в результате умножения получится число с целой частью, отличное от нуля, то целая часть записывается отдельно (слева от числа), а число записывается с нулевой целой частью. Если же при умножении получиться число с нулевой целой частью, то слева от нее записывается нуль. Процесс умножения продолжается до тех пор, пока в дробной части не получится чистый нуль или же не получим требуемое количество разрядов. Записывая жирные числа (Рис.4) сверху вниз получим требуемое число в двоичной системе счисления: 0.0011011.
Следовательно можно записать:
Пример 8. Переведем число 0.125 из десятичной системы счисления в двоичную СС.
0.125 | ||
x | 2 | |
0.25 | ||
x | 2 | |
0.5 | ||
x | 2 | |
1 | 0.0 |
Рис. 5
Для приведения числа 0.125 из десятичной СС в двоичную, данное число последовательно умножается на 2. В третьем этапе получилось 0. Следовательно, получился следующий результат:
Пример 9. Переведем число 0.214 из десятичной системы счисления в шестнадцатеричную СС.
0.214 | ||
x | 16 | |
3 | 0.424 | |
x | 16 | |
6 | 0.784 | |
x | 16 | |
12 | 0.544 | |
x | 16 | |
8 | 0.704 | |
x | 16 | |
11 | 0.264 | |
x | 16 | |
4 | 0.224 |
Рис. 6
Следуя примерам 4 и 5 получаем числа 3, 6, 12, 8, 11, 4. Но в шестнадцатеричной СС числам 12 и 11 соответствуют числа C и B. Следовательно имеем:
Пример 10. Переведем число 0.512 из десятичной системы счисления в восьмеричную СС.
0.512 | ||
x | 8 | |
4 | 0.096 | |
x | 8 | |
0.768 | ||
x | 8 | |
6 | 0.144 | |
x | 8 | |
1 | 0.152 | |
x | 8 | |
1 | 0.216 | |
x | 8 | |
1 | 0.728 |
Рис. 7
Получили:
Пример 11. Переведем число 159.125 из десятичной системы счисления в двоичную СС. Для этого переведем отдельно целую часть числа (Пример 4) и дробную часть числа (Пример 8). Далее объединяя эти результаты получим:
Пример 12. Переведем число 19673.214 из десятичной системы счисления в шестнадцатеричную СС. Для этого переведем отдельно целую часть числа (Пример 6) и дробную часть числа (Пример 9). Далее объединяя эти результаты получим:
Другие системы [ править ]
«Зигзагообразное кодирование» буферов протокола Google — это система, аналогичная системе «знак и величина», но в которой для представления знака используется младший бит, и он имеет единственное представление нуля. Это позволяет эффективно использовать количественное кодирование переменной длины, предназначенное для неотрицательных (беззнаковых) целых чисел, для целых чисел со знаком.
Другой подход — присвоить каждой цифре знак, в результате чего будет получено представление цифры со знаком . Например, в 1726 году Джон Колсон выступал за сокращение выражений до «малых чисел», цифр 1, 2, 3, 4 и 5. В 1840 году Огюстен Коши также выразил предпочтение таким модифицированным десятичным числам, чтобы уменьшить ошибки в вычислениях.
Дополнение
Двоичное значение | Дополнительное толкование | Неподписанная интерпретация |
---|---|---|
00000000 | +0 | |
00000001 | 1 | 1 |
⋮ | ⋮ | ⋮ |
01111101 | 125 | 125 |
01111110 | 126 | 126 |
01111111 | 127 | 127 |
10000000 | −127 | 128 |
10000001 | −126 | 129 |
10000010 | −125 | 130 |
⋮ | ⋮ | ⋮ |
11111101 | −2 | 253 |
11111110 | −1 | 254 |
11111111 | −0 | 255 |
В качестве альтернативы, система, известная как дополнение может использоваться для представления отрицательных чисел. Дополнительной формой отрицательного двоичного числа для единиц является побитовое НЕ применительно к нему, то есть «дополнение» его положительного аналога. Как и представление знака и величины, дополнение до единиц имеет два представления 0: 00000000 (+0) и 11111111 (−0).
Например, форма дополнения до единиц 00101011 (4310) становится 11010100 (−4310). Диапазон подписанный числа с дополнением до единиц представлены −(2N−1 − 1) к (2N−1 − 1) и ± 0. Обычный восьмиразрядный байт равен −127.10 до +12710 где ноль равен либо 00000000 (+0), либо 11111111 (-0).
Чтобы сложить два числа, представленных в этой системе, выполняется обычное двоичное сложение, но затем необходимо выполнить бесконечный перенос: то есть добавить любой результат нести обратно в полученную сумму. Чтобы понять, почему это необходимо, рассмотрим следующий пример, показывающий случай добавления −1 (11111110) к +2 (00000010):
двоичное десятичное 11111110 −1 + 00000010 +2 ─────────── ── 1 00000000 0 ← Не правильный ответ 1 +1 ← Добавить перенос ─────────── ── 00000001 1 ← Правильный ответ
В предыдущем примере первое двоичное сложение дает 00000000, что неверно. Правильный результат (00000001) появляется только тогда, когда перенос добавлен обратно.
Замечание по терминологии: система называется «дополнением до единицы», потому что положительного значения Икс (представлен как побитовое НЕ из Икс) также можно сформировать вычитанием Икс из дополнительного представления нуля до единиц, которое является длинной последовательностью единиц (−0). С другой стороны, арифметика с дополнением до двух образует отрицание Икс путем вычитания Икс от одной большой степени двойки, то есть конгруэнтный до +0. Следовательно, представление одного и того же отрицательного значения дополнением до единицы и дополнением двух будет отличаться на единицу.
Обратите внимание, что представление отрицательного числа с дополнением единиц может быть получено из представления знаковой величины просто путем побитового дополнения величины
База −2
В обычных двоичных системах счисления основание или основание, равно 2; таким образом, крайний правый бит представляет 2, следующий бит представляет 21, следующий бит 22, и так далее. Однако возможна и двоичная система счисления с основанием −2. Крайний правый бит представляет (−2) = +1, следующий бит представляет (−2)1 = −2, следующий бит (−2)2 = +4 и так далее с переменным знаком. Числа, которые могут быть представлены четырьмя битами, показаны в сравнительной таблице ниже.
Диапазон чисел, которые могут быть представлены, асимметричен. Если слово имеет четное число битов, величина наибольшего отрицательного числа, которое может быть представлено, вдвое больше, чем наибольшее положительное число, которое может быть представлено, и наоборот, если слово имеет нечетное число битов.
Знаковые дополнительные двоичные коды.
От перечисленных недостатков свободны дополнительные коды. Эти коды позволяют непосредственно суммировать
положительные и отрицательные числа не анализируя знаковый разряд и при этом получать правильный результат. Все
это становится возможным благодаря тому, что дополнительные числа являются естественным кольцом чисел, а не
исскуственным образованием как прямые и обратные коды. Кроме того немаловажным является то, что вычислять
дополнение в двоичном коде чрезвычайно легко. Для этого достаточно к обратному коду добавить 1:
Диапазон чисел, которые можно записать таким кодом: -128 .. +127. Для шестнадцатиразрядного кода этот диапазон будет:
-32768 .. +32767. В восьмиразрядном процессоре для хранения такого числа используется две ячейки памяти, расположенные в
соседних адресах.
В обратных и дополнительных кодах наблюдается интересный эффект, который называется эффект распространения
знака. Он заключается в том, что при преобразовании однобайтного числа в двухбайтное достаточно всем битам
старшего байта присвоить значение знакового бита младшего байта. То есть для хранения знака числа можно
использовать сколько угодно старших бит. При этом значение кода совершенно не изменяется.
Использование для представления знака числа двух бит предоставляет интересную возможность контролировать
переполнения при выполнении арифметических операций. Рассмотрим несколько примеров.
1) Просуммируем числа 12 и 5
В этом примере видно, что в результате суммирования получается правильный результат. Это можно
проконтролировать по флагу переноса C, который совпадает со знаком результата (действует эффект распространения
знака).
2) Просуммируем два отрицательных числа -12 и -5
В этом примере флаг переноса C тоже совпадает со знаком результата, то есть переполнения не произошло и в этом
случае
3) Просуммируем положительное и отрицательное число -12 и +5
В этом примере при суммировании положительного и отрицательного числа автоматически получается правильный
знак результата. В данном случае знак результата отрицательный. Флаг переноса совпадает со знаком результата,
поэтому переполнения не было (мы можем убедиться в этом непосредственными вычислениями на бумаге или на
калькуляторе).
4) Просуммируем положительное и отрицательное число +12 и -5
В данном примере знак результата положительный. Флаг переноса совпадает со знаком результата, поэтому
переполнения не было и в этом случае.
5)Просуммируем числа 100 и 31
В этом примере видно, что в результате суммирования произошло переполнение восьмибитовой переменной, т.к. в
результате операции над положительными числами получился отрицательный результат. Однако если рассмотреть флаг
переноса, то он не совпадает со знаком результата. Эта ситуации является признаком переполнения результата и
легко обнаруживается при помощи операции «исключающее ИЛИ» над старшим битом результата и флагом переноса C.
Большинство процессоров осуществляют эту операцию аппаратно и помещают результат во флаг переполнения OV.
В этом примере результате операции над отрицательными числами в результате суммирования произошло
переполнение восьмибитовой переменной, т.к. получился положительный результат. И в этом случае если рассмотреть
флаг переноса C, то он не совпадает со знаком результата. Отличие от предыдущего случая только в комбинации этих
бит. В примере 5 говорят о переполнении результата (комбинация 01), а в примере 6 об антипереполнении результата (комбинация
10).
Литература:
Другие виды двоичных кодов:
Иногда бывает удобно хранить числа в памяти процессора в десятичном
виде
http://сайт/proc/DecCod.php
Стандартные форматы чисел
с плавающей запятой для компьютеров и микроконтроллеров
http://сайт/proc/float/
Представление текстов в памяти компьютеров и микроконтроллеров
http://сайт/proc/text.php
В настоящее время и в технике и в быту широко используются как
позиционные, так и непозиционные системы счисления..php
Вещественные числа
Микропроцессор не содержит средства для работы с вещественными числами. В системе команд микропроцессора отсутствуют команды для арифметических операций с вещественными числами.
Такие средства (команды) содержатся в математическом (арифметическом) сопроцессоре — специальном устройстве, предназначенном для обработки вещественных чисел. В реальности микропроцессор взаимодействует с сопроцессором, посылая ему запросы на выполнение операций с вещественными числами и принимая ответы.
Однако программирование сопроцессора — достаточно сложная задача, требующая специальных знаний, и в курсе «Основы программирования» нами не рассматривается.
Поэтому ограничимся знаниями и практическими навыками работы с целыми числами.