Хранение в памяти вещественных чисел
В $60$-х и $70$-х гг. не было единопризнанного стандарта представления чисел с плавающей запятой, из-за чего программы того времени не были переносимыми приложениями. Также большой проблемой были «странности» разных компьютеров, которые нужно было знать и учитывать при создании программ.
В $1976$ году была появилась инициатива создать единый стандарт для представления чисел с плавающей запятой, что существенно упростило работу с числами.
Вычисления компьютера ограничены его памятью, поэтому дробная часть вещественных чисел не является бесконечной и хранится в памяти с определенной точностью.
Числа в нормализованном виде чаще всего записываются только на экране компьютера, поэтому принято запятую в них заменять на точку.
Принятый способ хранения вещественных (действительных) чисел в памяти компьютера использует нормализованную (экспоненциальную) запись действительных чисел.
Для хранения вещественных чисел (как и для целых) используется двоичная система.{8-1}-1=128+128-1=255.\]
Алгоритм представления вещественного числа:
Перевести число в двоичную систему счисления.
Привести число к нормализованной записи.
Найти смещённый порядок числа.
Поместить знак, порядок и мантиссу в соответствующие разряды.
Пример 4
Представим число $-25.625$ в $4$-байтовом представлении ($1$ бит отводится под знак числа, $8$ бит — под смещённый порядок, остальные биты — под мантиссу).
Будем действовать по алгоритму:
Переведем число $-25.625$ в двоичный код:
Рисунок 1.
\[{25}_{10}={11001}_2\]Рисунок 2.
\[{25}_{10}={11001}_2\] \[{0.625}_{10}={0.101}_2\] \[{-25.625}_{10}={-11001.101}_2\]Приведем число к нормализованному виду:
\[{-11001.4\]Найдем смещенный порядок числа:
\[СП=127+4=131\]Поместим знак, порядок и мантиссу в соответствующие разряды:
Рисунок 3.
Представление чисел в компьютере. Представление целых и вещественных чисел в памяти компьютера
Любому, кто хоть раз задумывался в жизни о том, чтобы стать «айтишником» или системным администратором, да и просто связать судьбу с вычислительной техникой, знание о том, как происходит представление чисел в памяти компьютера, абсолютно необходимо. Ведь именно на этом основываются языки программирования низкого уровня, такие как Assembler. Поэтому сегодня мы рассмотрим представление чисел в компьютере и их размещение в ячейках памяти.
Система счисления
Если вы читаете данную статью, то, скорее всего, уже знаете об этом, но повторить стоит. Все данные в персональном компьютере хранятся в двоичной системе счисления. Это означает, что любое число необходимо представить в соответствующей форме, то есть состоящим из нулей и единиц.
Чтобы перевести привычные для нас десятичные числа к виду, понятному компьютеру, нужно воспользоваться описанным ниже алгоритмом. Существуют и специализированные калькуляторы.
Итак, для того чтобы перевести число в двоичную систему счисления, нужно взять выбранное нами значение и поделить его на 2. После этого мы получим результат и остаток (0 или 1). Результат опять делим 2 и запоминаем остаток. Данную процедуру нужно повторять до тех пор, пока в итоге также не окажется 0 или 1. Затем записываем конечное значение и остатки в обратном порядке, как мы их получали.
Именно так и происходит представление чисел в компьютере. Любое число записывается в двоичной форме, а потом занимает ячейку памяти.
Память
Как вам должно быть уже известно, минимальная единица измерения информации составляет 1 бит. Как мы уже выяснили, представление чисел в компьютере происходит в двоичном формате. Таким образом, каждый бит памяти будет занят одним значением – 1 или 0.
Для хранения больших чисел используются ячейки. Каждая такая единица содержит до 8 бит информации. Поэтому можно сделать вывод, что минимальное значение в каждом отрезке памяти может составлять 1 байт или быть восьмизначным двоичным числом.
Целые
Наконец мы подобрались к непосредственному размещению данных в компьютере. Как было уже сказано, первым делом процессор переводит информацию в двоичный формат, а только затем размещает в памяти.
Начнем мы с самого простого варианта, коим является представление целых чисел в компьютере. Память ПК отводит под этот процесс до смешного малое количество ячеек – всего одну. Таким образом, максимум в одном слоте могут быть значения от 0 до 11111111. Давайте переведём максимальное число в привычную нам форму записи.
Х = 1 × 27 + 1 × 26 + 1 × 25 + 1 × 24 + 1 × 23 + 1 × 22 + 1 × 21 + 1 × 20 = 1 × 28 — 1 = 255.
Теперь мы видим, что в одной ячейке памяти может располагаться значение от 0 до 255. Однако это относится исключительно к целым неотрицательным числам. Если же компьютеру понадобится записать отрицательное значение, всё пройдет немного по-другому.
Отрицательные числа
Теперь давайте посмотрим, как происходит представление чисел в компьютере, если они являются отрицательными. Для размещения значения, которое меньше нуля, отводится две ячейки памяти, или 16 бит информации. При этом 15 уходят под само число, а первый (крайний левый) бит отдается под соответствующий знак.
Если цифра отрицательная, то записывается «1», если положительная, то «0». Для простоты запоминания можно провести такую аналогию: если знак есть, то ставим 1, если его нет, то ничего (0).
Оставшиеся 15 бит информации отводятся под число. Аналогично предыдущему случаю, в них можно поместить максимум пятнадцать единиц. Стоит отметить, что запись отрицательных и положительных чисел существенно отличается друг от друга.
Для того чтобы разместить в 2 ячейках памяти значение больше нуля или равное ему, используется так называемый прямой код. Данная операция производится так же, как и было описано, а максимальное А = 32766, если использовать десятичную систему счисления. Сразу хочется отметить, что в данном случае «0» относится к положительным.
Примеры
Представление целых чисел в памяти компьютера не является такой уж трудной задачей. Хотя она немного усложняется, если речь идет об отрицательном значении. Для записи числа, которое меньше нуля, используется дополнительный код.
Чтобы его получить, машина производит ряд вспомогательных операций.
- Сначала записывается модуль отрицательного числа в двоичном счислении. То есть компьютер запоминает аналогичное, но положительное значение.
- Затем проводится инвертирование каждого бита памяти. Для этого все единицы заменяются нулями и наоборот.
- Прибавляем «1» к полученному результату. Это и будет дополнительный код.
Приведем наглядный пример. Пусть у нас есть число Х = — 131. Сначала получаем его модуль |Х|= 131. Затем переводим в двоичную систему и записываем в 16 ячеек. Получим Х = 0000000010000011. После инвертирования Х=1111111101111100. Добавляем к нему «1» и получаем обратный код Х=1111111101111101. Для записи в 16-битную ячейку памяти минимальным числом является Х = — (215) = — 32767.
Длинные целые
Как видите, представление вещественных чисел в компьютере не так уж и сложно. Однако рассмотренного диапазона может не хватать для большинства операций. Поэтому, для того чтобы разместить большие числа, компьютер выделяет из памяти 4 ячейки, или 32 бита.
Процесс записи абсолютно не отличается от представленного выше. Так что мы просто приведем диапазон чисел, которые могут храниться в данном типе.
Хмах=2 147 483 647.
Хmin=- 2 147 483 648.
Данных значений в большинстве случаев достаточно для того, чтобы записывать и проводить операции с данными.
Представление вещественных чисел в компьютере имеет свои преимущества и недостатки. С одной стороны, данная методика позволяет проще производить операции между целочисленными значениями, что значительно ускоряет работу процессора. С другой стороны, данного диапазона недостаточно для решения большинства задач экономики, физики, арифметики и других наук. Поэтому теперь мы рассмотрим очередную методику для сверхвеличин.
Плавающая запятая
Это последнее, что вам необходимо знать про представление чисел в компьютере. Поскольку при записи дробей возникает проблема определения положения запятой в них, для размещения подобных цифр в компьютере используется экспоненциальная форма.
Любое число может быть представлено в следующей форме Х = m * рп. Где m – это мантисса числа, р – основание системы счисления и п – порядок числа.
Для стандартизации записи чисел с плавающей запятой используется следующее условие, согласно которому модуль мантиссы должен быть больше или равен 1/п и меньше 1.
Пусть нам дано число 666,66. Приведём его к экспоненциальной форме. Получится Х = 0,66666 * 103. Р = 10 и п = 3.
На хранение значений с плавающей запятой обычно выделяется 4 или 8 байт (32 или 64 бита). В первом случае это называется числом обычной точности, а во втором – двойной точности.
Из 4 байт, выделенных под хранение цифр, 1 (8 разрядов) отдается под данные о порядке и его знаке, а 3 байта (24 разряда) уходят на хранение мантиссы и её знака по тем же принципам, что и для целочисленных значений. Зная это, мы можем провести нехитрые расчеты.
Максимальное значение п = 11111112= 12710. Исходя из него, мы можем получить максимальный размер числа, которое может храниться в памяти компьютера. Х=2127. Теперь мы можем вычислить максимально возможную мантиссу. Она будет равна 223 – 1 ≥ 223 = 2(10 × 2,3) ≥ 10002,3 = 10(3 × 2,3) ≥ 107. В итоге, мы получили приближенное значение.
Если теперь мы объединим оба расчета, то получим значение, которое может быть записано без потерь в 4 байта памяти. Оно будет равно Х = 1,701411 * 1038. Остальные цифры были отброшены, поскольку именно такую точность позволяет иметь данный способ записи.
Двойная точность
Поскольку все вычисления были расписаны и объяснены в предыдущем пункте, здесь мы расскажем всё очень коротко. Для чисел с двойной точностью обычно выделяется 11 разрядов для порядка и его знака, а также 53 разряда для мантиссы.
П = 11111111112= 102310.
М = 252 -1 = 2(10*5.2) = 10005.2 = 1015.6. Округляем в большую сторону и получаем максимальное число Х = 21023 с точностью до «м».
Надеемся, информация про представление целых и вещественных чисел в компьютере, которую мы предоставили, пригодится вам в обучении и будет хоть немного понятнее, чем то, что обычно пишут в учебниках.
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||
Представление чисел с плавающей запятой в компьютере. Формат представления чисел с плавающей запятой
| Планирование уроков на учебный год (ФГОС) | § 1.2. Представление чисел в компьютере
Ключевые слова:
Разряд
беззнаковое представление целых чисел
представление целых чисел со знаком
представление вещественных чисел
1.2.1. Представление целых чисел
Оперативная память компьютера состоит из ячеек, каждая из которых представляет собой физическую систему, состоящую из некоторого числа однородных элементов. Эти элементы обладают двумя устойчивыми состояниями, одно из которых соответствует нулю, а другое — единице. Каждый такой элемент служит для хранения одного из битов — разряда двоичного числа. Именно поэтому каждый элемент ячейки называют битом или разрядом (рис. 1.2).
Рис. 1.2. Ячейка памяти
Для компьютерного представления целых чисел используется несколько различных способов, отличающихся друг от друга количеством разрядов (под целые числа обычно отводится 8, 16, 32 или 64 разряда) и наличием или отсутствием знакового разряда. Беззнаковое представление можно использовать только для неотрицательных целых чисел, отрицательные числа представляются только в знаковом виде.
Беззнаковое представление используется для таких объектов, как адреса ячеек, всевозможные счётчики (например, число символов в тексте), а также числа, обозначающие дату и время, размеры графических изображений в пикселях и т. д.
Максимальное значение целого неотрицательного числа достигается в случае, когда во всех разрядах ячейки хранятся единицы. Для n-разрядного представления оно будет равно 2 n -1. Минимальное число соответствует п нулям, хранящимся в n разрядах памяти, и равно нулю.
Ниже приведены максимальные значения для беззнаковых целых n-разрядных чисел:
Для получения компьютерного представления беззнакового целого числа достаточно перевести число в двоичную систему счисления и дополнить полученный результат слева нулями до стандартной разрядности.
Пример 1 . Число 53 10 = 110101 2 в восьмиразрядном представлении имеет вид:
Это же число 53 в шестнадцати разрядах будет записано следующим образом:
При представлении со знаком самый старший (левый) разряд отводится под знак числа, остальные разряды — под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное — 1. Такое представление чисел называется прямым кодом.
В компьютере прямые коды используются для хранения положительных чисел в запоминающих устройствах, для выполнения операций с положительными числами.
На сайте Федерального центра информационно-образовательных ресурсов (http://fcior.edu.ru/) размещён информационный модуль «Число и его компьютерный код». С помощью этого ресурса вы можете получить дополнительную информацию по изучаемой теме.
Для выполнения операций с отрицательными числами используется дополнительный код, позволяющий заменить операцию вычитания сложением. Узнать алгоритм образования дополнительного кода вы можете с помощью информационного модуля «Дополнительный код», размещённого на сайте Федерального центра информационно-образовательных ресурсов (http://fcior.edu.ru/).
1.2.2. Представление вещественных чисел
Любое вещественное число А может быть записано в экспоненциальной форме:
где:
m — мантисса числа;
p — порядок числа.
Например, число 472 ООО ООО может быть представлено так: 4,72 10 8 , 47,2 10 7 , 472,0 10 6 и т. д.
С экспоненциальной формой записи чисел вы могли встречаться при выполнении вычислений с помощью калькулятора, когда в качестве ответа получали записи следующего вида: 4.72Е+8.
Здесь знак «Е» обозначает основание десятичной системы счисления и читается как «умножить на десять в степени».
Из приведённого выше примера видно, что положение запятой в записи числа может изменяться.
Для единообразия мантиссу обычно записывают как правильную дробь, имеющую после запятой цифру, отличную от нуля. В этом случае число 472 ООО ООО будет представлено как 0,472 10 9 .
Вещественное число может занимать в памяти компьютера 32 или 64 разряда. При этом выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.
Пример:
Диапазон представления вещественных чисел определяется количеством разрядов, отведённых для хранения порядка числа, а точность определяется количеством разрядов, отведённых для хранения мантиссы.
Максимальное значение порядка числа для приведённого выше примера составляет 1111111 2 = 127 10 , и, следовательно, максимальное значение числа:
0,11111111111111111111111 10 1111111
Попытайтесь самостоятельно выяснить, каков десятичный эквивалент этой величины.
Широкий диапазон представления вещественных чисел важен для решения научных и инженерных задач. Вместе с тем следует понимать, что алгоритмы обработки таких чисел более трудоёмки по сравнению с алгоритмами обработки целых чисел.
САМОЕ ГЛАВНОЕ
Для компьютерного представления целых чисел используются несколько различных способов, отличающихся друг от друга количеством разрядов (8, 16, 32 или 64) и наличием или отсутствием знакового разряда.
Для представления беззнакового целого числа его следует перевести в двоичную систему счисления и дополнить полученный результат слева нулями до стандартной разрядности.
При представлении со знаком самый старший разряд отводится под знак числа, остальные разряды — под само число. Бели число положительное, то в знаковый разряд помещается 0, если число отрицательное, то 1. Положительные числа хранятся в компьютере в прямом коде, отрицательные — в дополнительном.
При хранении в компьютере вещественных чисел выделяются разряды на хранение знака порядка числа, самого порядка, знака мантиссы и мантиссы. При этом любое число записывается так:
где:
m — мантисса числа;
q — основание системы счисления;
p — порядок числа.
Вопросы и задания
1. Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Используйте эти материалы при подготовке ответов на вопросы и выполнении заданий.
2. Как в памяти компьютера представляются целые положительные и отрицательные числа?
3. Любое целое число можно рассматривать как вещественное, но с нулевой дробной частью. Обоснуйте целесообразность наличия особых способов компьютерного представления целых чисел.
4. Представьте число 63 10 в беззнаковом 8-разрядном формате.
5. Найдите десятичные эквиваленты чисел по их прямым кодам, записанным в 8-разрядном формате со знаком:
а) 01001100;
б) 00010101.
6. Какие из чисел 443 8 , 101010 2 , 256 10 можно сохранить в 8-разрядном формате?
7. Запишите следующие числа в естественной форме:
а) 0,3800456 10 2 ;
б) 0,245 10 -3 ;
в) 1,256900Е+5;
г) 9,569120Е-3.
8. Запишите число 2010,0102 10 пятью различными способами в экспоненциальной форме.
9. Запишите следующие числа в экспоненциальной форме с нормализованной мантиссой — правильной дробью, имеющей после запятой цифру, отличную от нуля:
а) 217,934 10 ;
б) 75321 10 ;
в) 0,00101 10 .
10. Изобразите схему, связывающую основные понятия, рассмотренные в данном параграфе.
Если бы мы могли заглянуть в содержание компьютерной памяти, то мы бы увидели следующее:
Данный рисунок отражает Правило №1: Данные (и программы) в памяти компьютера хранятся в двоичном виде, т.е. в виде цепочек ноликов и единичек.
Правило №2: представление данных в компьютере дискретно.
Что такое дискретность?
Самый близкий ответ: «Отдельный»
Примечание: Дискретное множество состоит из отделенных друг от друга элементов. Например, песок дискретен, поскольку он состоит из отдельных песчинок. А вода или масло непрерывны (в рамках наших ощущений, поскольку отдельные молекулы мы все равно ощутить не можем)
Например, изображение строится в виде совокупности точек, т.е. дискретно.
Правило №3: множество представимых в памяти величин ограничено и конечно.
Представление чисел в компьютере.
Целые числа в компьютере. (Формат с фиксированной запятой)
Любое вычислительное устройство (компьютер, калькулятор) может работать только с ограниченным множеством целых чисел. Посмотрите на табло калькулятора, на нем помещается 10 знаков. Самое большое положительное число, которое помещается на табло:
Самое большое по абсолютной величине отрицательное число:
Аналогично дело обстоит и в компьютере.
Например, если под целое число выделяется ячейка памяти размером в 16 битов, то самое большое положительное число будет таким:
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
В десятичной системе счисления оно равно:
2 15 -1=32767
Здесь первый бит играет роль знака числа. Ноль — признак положительного числа. Самое большое по модулю отрицательное число равно -32768.
Как получить его внутреннее представление:
1) перевести число в 32768 в двоичную систему счисления,
он равно
1000000000000000 — получили прямой
код.
2) инвертировать этот двойчный код, т.е. заменить нули на единицы, а единицы на нули — получили обратный код .
0111111111111111
3) Прибавить единицу к этому двоичному числу, в результате получим:
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Единица в первом бите обозначает знак «минус».
(не нужно думать, что полученный код — это «минус ноль». Этот код представляет число -32768.)
Таковы правила машинного представления целых чисел. Данное внутреннее представление числа называется дополнительным кодом .
Если под целое число в памяти компьютера отводится N бит, то диапазон значений целых чисел: [-2 N-1 -1, 2 N -1]
Мы рассмотрели формат представления целых чисел со знаком, т.е. положительных и отрицательных. Бывает, что нужно работать только с положительными целыми числами. В таком случае используется формат представления целых чисел без знака.
В этом формате самое маленькое число — ноль, а самое большое число для 16-разрядной ячейки:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
В десятичной системе счисления это 2 16 — 1 = 65535, в два раза больше по модулю, чем в представлении со знаком.
Целые числа в компьютере. (Формат с плавающей запятой)
Самое большое число у разных калькуляторов может оказаться разным. У самого простого калькулятора — 999999999. Если прибавить к нему еще единицу, то калькулятор выдаст сообщение об ошибке. А на более «умном» калькуляторе прибавление единицы приведет к такому результату:
Данную запись на табло понимают так: 1 x10 9 .
Такой формат записи числа называется форматом с плавающей запятой .
1 | е | + | 0 | 9 |
мантисса | порядок числа |
В компьютере числа могу и представляться как в формате с фиксированной запятой так и в формате с плавающей запятой.
Любому, кто хоть раз задумывался в жизни о том, чтобы стать «айтишником» или системным администратором, да и просто связать судьбу с знание о том, как происходит представление чисел в абсолютно необходимо. Ведь именно на этом основываются языки программирования низкого уровня, такие как Assembler. Поэтому сегодня мы рассмотрим представление чисел в компьютере и их размещение в ячейках памяти.
Система счисления
Если вы читаете данную статью, то, скорее всего, уже знаете об этом, но повторить стоит. Все данные в персональном компьютере хранятся в двоичной Это означает, что любое число необходимо представить в соответствующей форме, то есть состоящим из нулей и единиц.
Чтобы перевести привычные для нас десятичные числа к виду, понятному компьютеру, нужно воспользоваться описанным ниже алгоритмом. Существуют и специализированные калькуляторы.
Итак, для того чтобы перевести число в двоичную систему счисления, нужно взять выбранное нами значение и поделить его на 2. После этого мы получим результат и остаток (0 или 1). Результат опять делим 2 и запоминаем остаток. Данную процедуру нужно повторять до тех пор, пока в итоге также не окажется 0 или 1. Затем записываем конечное значение и остатки в обратном порядке, как мы их получали.
Именно так и происходит представление чисел в компьютере. Любое число записывается в двоичной форме, а потом занимает ячейку памяти.
Память
Как вам должно быть уже известно, минимальная единица измерения информации составляет 1 бит. Как мы уже выяснили, представление чисел в компьютере происходит в двоичном формате. Таким образом, каждый бит памяти будет занят одним значением — 1 или 0.
Для хранения используются ячейки. Каждая такая единица содержит до 8 бит информации. Поэтому можно сделать вывод, что минимальное значение в каждом отрезке памяти может составлять 1 байт или быть восьмизначным двоичным числом.
Целые
Наконец мы подобрались к непосредственному размещению данных в компьютере. Как было уже сказано, первым делом процессор переводит информацию в двоичный формат, а только затем размещает в памяти.
Начнем мы с самого простого варианта, коим является представление целых чисел в компьютере. Память ПК отводит под этот процесс до смешного малое количество ячеек — всего одну. Таким образом, максимум в одном слоте могут быть значения от 0 до 11111111. Давайте переведём максимальное число в привычную нам форму записи.
Х = 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 1 × 2 8 — 1 = 255.
Теперь мы видим, что в одной ячейке памяти может располагаться значение от 0 до 255. Однако это относится исключительно к целым неотрицательным числам. Если же компьютеру понадобится записать отрицательное значение, всё пройдет немного по-другому.
Отрицательные числа
Теперь давайте посмотрим, как происходит представление чисел в компьютере, если они являются отрицательными. Для размещения значения, которое меньше нуля, отводится две ячейки памяти, или 16 бит информации. При этом 15 уходят под само число, а первый (крайний левый) бит отдается под соответствующий знак.
Если цифра отрицательная, то записывается «1», если положительная, то «0». Для простоты запоминания можно провести такую аналогию: если знак есть, то ставим 1, если его нет, то ничего (0).
Оставшиеся 15 бит информации отводятся под число. Аналогично предыдущему случаю, в них можно поместить максимум пятнадцать единиц. Стоит отметить, что запись отрицательных и положительных чисел существенно отличается друг от друга.
Для того чтобы разместить в 2 ячейках памяти значение больше нуля или равное ему, используется так называемый прямой код. Данная операция производится так же, как и было описано, а максимальное А = 32766, если использовать Сразу хочется отметить, что в данном случае «0» относится к положительным.
Примеры
Представление целых чисел в памяти компьютера не является такой уж трудной задачей. Хотя она немного усложняется, если речь идет об отрицательном значении. Для записи числа, которое меньше нуля, используется дополнительный код.
Чтобы его получить, машина производит ряд вспомогательных операций.
- Сначала записывается модуль отрицательного числа в двоичном счислении. То есть компьютер запоминает аналогичное, но положительное значение.
- Затем проводится инвертирование каждого бита памяти. Для этого все единицы заменяются нулями и наоборот.
- Прибавляем «1» к полученному результату. Это и будет дополнительный код.
Приведем наглядный пример. Пусть у нас есть число Х = — 131. Сначала получаем его модуль |Х|= 131. Затем переводим в двоичную систему и записываем в 16 ячеек. Получим Х = 0000000010000011. После инвертирования Х=1111111101111100. Добавляем к нему «1» и получаем обратный код Х=1111111101111101. Для записи в 16-битную ячейку памяти минимальным числом является Х = — (2 15) = — 32767.
Длинные целые
Как видите, представление вещественных чисел в компьютере не так уж и сложно. Однако рассмотренного диапазона может не хватать для большинства операций. Поэтому, для того чтобы разместить большие числа, компьютер выделяет из памяти 4 ячейки, или 32 бита.
Процесс записи абсолютно не отличается от представленного выше. Так что мы просто приведем диапазон чисел, которые могут храниться в данном типе.
Х мах =2 147 483 647.
Х min =- 2 147 483 648.
Данных значений в большинстве случаев достаточно для того, чтобы записывать и проводить операции с данными.
Представление вещественных чисел в компьютере имеет свои преимущества и недостатки. С одной стороны, данная методика позволяет проще производить операции между целочисленными значениями, что значительно ускоряет работу процессора. С другой стороны, данного диапазона недостаточно для решения большинства задач экономики, физики, арифметики и других наук. Поэтому теперь мы рассмотрим очередную методику для сверхвеличин.
Плавающая запятая
Это последнее, что вам необходимо знать про представление чисел в компьютере. Поскольку при записи дробей возникает проблема определения положения запятой в них, для размещения подобных цифр в компьютере используется экспоненциальная форма.
Любое число может быть представлено в следующей форме Х = m * р п. Где m — это мантисса числа, р — основание системы счисления и п — порядок числа.
Для стандартизации записи чисел с плавающей запятой используется следующее условие, согласно которому модуль мантиссы должен быть больше или равен 1/п и меньше 1.
Пусть нам дано число 666,66. Приведём его к экспоненциальной форме. Получится Х = 0,66666 * 10 3 . Р = 10 и п = 3.
На хранение значений с плавающей запятой обычно выделяется 4 или 8 байт (32 или 64 бита). В первом случае это называется числом обычной точности, а во втором — двойной точности.
Из 4 байт, выделенных под хранение цифр, 1 (8 разрядов) отдается под данные о порядке и его знаке, а 3 байта (24 разряда) уходят на хранение мантиссы и её знака по тем же принципам, что и для целочисленных значений. Зная это, мы можем провести нехитрые расчеты.
Максимальное значение п = 1111111 2 = 127 10 . Исходя из него, мы можем получить максимальный размер числа, которое может храниться в памяти компьютера. Х=2 127 . Теперь мы можем вычислить максимально возможную мантиссу. Она будет равна 2 23 — 1 ≥ 2 23 = 2 (10 × 2,3) ≥ 1000 2,3 = 10 (3 × 2,3) ≥ 10 7 . В итоге, мы получили приближенное значение.
Если теперь мы объединим оба расчета, то получим значение, которое может быть записано без потерь в 4 байта памяти. Оно будет равно Х = 1,701411 * 10 38 . Остальные цифры были отброшены, поскольку именно такую точность позволяет иметь данный способ записи.
Двойная точность
Поскольку все вычисления были расписаны и объяснены в предыдущем пункте, здесь мы расскажем всё очень коротко. Для чисел с двойной точностью обычно выделяется 11 разрядов для порядка и его знака, а также 53 разряда для мантиссы.
П = 1111111111 2 = 1023 10 .
М = 2 52 -1 = 2 (10*5.2) = 1000 5.2 = 10 15.6 . Округляем в большую сторону и получаем максимальное число Х = 2 1023 с точностью до «м».
Надеемся, информация про представление целых и вещественных чисел в компьютере, которую мы предоставили, пригодится вам в обучении и будет хоть немного понятнее, чем то, что обычно пишут в учебниках.
Максимальное значение целого неотрицательного числа достигается в случае, когда во всех ячейках хранятся единицы. Для n-разрядного представления оно будет равно
целых неотрицательных чисел . Минимальное число соответствует восьми нулям, хранящимся в восьми битах ячейки памяти, и равно нулю. Максимальное число соответствует восьми единицам и равно
А = 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 1 × 2 8 — 1 = 255 10 .
Диапазон изменения целых неотрицательных чисел чисел: от 0 до 255.
Для хранения целых чисел со знаком отводится две ячейки памяти (16 битов), причем старший (левый) разряд отводится под знак числа (если число положительное, то в знаковый разряд записывается 0, если число отрицательное — 1).
Представление в компьютере положительных чисел с использованием формата «знак-величина» называется прямым кодом числа. Например, число 2002 10 = 11111010010 2 будет представлено в 16-разрядном представлении следующим образом:
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
Максимальное положительное число (с учетом выделения одного разряда на знак) для целых чисел со знаком в n-разрядном представлении равно:
Для представления отрицательных чисел используется дополнительный код . Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что существенно упрощает работу процессора и увеличивает его быстродействие.
Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен 2 n — |A|.
Дополнительный код представляет собой дополнение модуля отрицательного числа А до 0, так как в n-разрядной компьютерной арифметике:
2 n — |А| + |А| = 0,
поскольку в компьютерной n-разрядной арифметике 2 n = 0. Действительно, двоичная запись такого числа состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, то есть n нулей.
Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм:
1. Модуль числа записать в прямом коде в n двоичных разрядах.
2. Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).
3. К полученному обратному коду прибавить единицу.
Запишем дополнительный код отрицательного числа -2002 для 16-разрядного компьютерного представления:
При n-разрядном представлении отрицательного числа А в дополнительным коде старший разряд выделяется для хранения знака числа (единицы). В остальных разрядах записывается положительное число
Чтобы число было положительным, должно выполняться условие
|А| £ 2 n-1 .
Следовательно, максимальное значение модуля числа А в га-разрядном представлении равно:
Тогда минимальное отрицательное число равно:
Определим диапазон чисел, которые могут храниться в оперативной памяти в формате длинных целых чисел со знаком (для хранения таких чисел отводится четыре ячейки памяти — 32 бита).
Максимальное положительное целое число (с учетом выделения одного разряда на знак) равно:
А = 2 31 — 1 = 2 147 483 647 10 .
Минимальное отрицательное целое число равно:
А = -2 31 = — 2 147 483 648 10 .
Достоинствами представления чисел в формате с фиксированной запятой являются простота и наглядность представления чисел, а также простота алгоритмов реализации арифметических операций.
Недостатком представления чисел в формате с фиксированной запятой является небольшой диапазон представления величин, недостаточный для решения математических, физических, экономических и других задач, в которых используются как очень малые, так и очень большие числа.
Представление чисел в формате с плавающей запятой. Вещественные числа хранятся и обрабатываются в компьютере в формате с плавающей запятой . В этом случае положение запятой в записи числа может изменяться.
Формат чисел с плавающей запятой базируется на экспоненциальной форме записи, в которой может быть представлено любое число. Так число А может быть представлено в виде:
где m — мантисса числа;
q — основание системы счисления;
n — порядок числа.
Для единообразия представления чисел с плавающей запятой используется нормализованная форма, при которой мантисса отвечает условию:
1/n £ |m|
Это означает, что мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля.
Преобразуем десятичное число 555,55, записанное в естественной форме, в экспоненциальную форму с нормализованной мантиссой:
555,55 = 0,55555 × 10 3 .
Здесь нормализованная мантисса: m = 0,55555, порядок: n = 3.
Число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности ) или 8 байтов (число двойной точности ). При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.
Диапазон изменения чисел определяется количеством разрядов, отведенных для хранения порядка числа, а точность (количество значащих цифр) определяется количеством разрядов, отведенных для хранения мантиссы.
Определим максимальное число и его точность для формата чисел обычной точности , если для хранения порядка и его знака отводится 8 разрядов, а для хранения мантиссы и ее знака — 24 разряда:
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
знак и порядок | знак и мантисса |
Максимальное значение порядка числа составит 1111111 2 = 127 10 , и, следовательно, максимальное значение числа составит:
2 127 = 1,7014118346046923173168730371588 × 10 38 .
Максимальное значение положительной мантиссы равно:
2 23 — 1 » 2 23 = 2 (10 × 2,3) » 1000 2,3 = 10 (3 × 2,3) » 10 7 .
Таким образом максимальное значение чисел обычной точности с учетом возможной точности вычислений составит 1,701411 × 10 38 (количество значащих цифр десятичного числа в данном случае ограничено 7 разрядами).
Задания
1.26. Заполнить таблицу, записав отрицательные десятичные числа в прямом, обратном и дополнительном кодах в 16-разрядном представлении:
1.27. Определить диапазон представления целых чисел со знаком (отводится 2 байта памяти) в формате с фиксированной запятой.
1.28. Определить максимальное число и его точность для формата чисел двойной точности , если для хранения порядка и его знака отводится 11 разрядов, а для хранения мантиссы и ее знака — 53 разряда.
Правила ввода чисел
- Числа в десятичной системе счисления могут вводиться как без дробной, так и с дробной частью (234234.455).
- Числа в двоичной системе счисления состоят только из цифр 0 и 1 (10100.01).
- Числа в шестнадцатеричной системе счисления состоят из цифр 0 … 9 и букв A … F .
- Можно также получать обратное представление кода (из шестнадцатеричной системы счисления в десятичную, 40B00000)
Решение . Представим число 133.54 в нормализованном экспоненциальном виде:
1.3354*10 2 = 1.3354*exp 10 2
Число 1.3354*exp 10 2 состоит из двух частей: мантиссы M=1.3354 и экспоненты exp 10 =2
Если мантисса находится в диапазоне 1 ≤ M Представление числа в денормализованном экспоненциальном виде .
Если мантисса находится в диапазоне 0,1 ≤ M Представим число в денормализованном экспоненциальном виде: 0.13354*exp 10 3
Пример №2
. Представить двоичное число 101.10 2 в нормализованном виде, записать в 32-битом стандарте IEEE754.
Решение .
Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде .
Сдвинем число на 2 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:
Мантисса M=1.011
Экспонента exp 2 =2
Преобразование двоичного нормализованного числа в 32 битный формат IEEE 754 .
Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0
Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту.
Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 2 + 127 = 129
Переведем экспоненту в двоичное представление.
Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M Для перевода целой части необходимо умножить разряд числа на соответствующую ему степень разряда.
01100000000000000000000 = 2 22 *0 + 2 21 *1 + 2 20 *1 + 2 19 *0 + 2 18 *0 + 2 17 *0 + 2 16 *0 + 2 15 *0 + 2 14 *0 + 2 13 *0 + 2 12 *0 + 2 11 *0 + 2 10 *0 + 2 9 *0 + 2 8 *0 + 2 7 *0 + 2 6 *0 + 2 5 *0 + 2 4 *0 + 2 3 *0 + 2 2 *0 + 2 1 *0 + 2 0 *0 = 0 + 2097152 + 1048576 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 3145728
В десятичном коде мантисса выражается числом 3145728
В результате число 101.10 представленное в IEEE 754 c одинарной точностью равно.
Переведем в шестнадцатеричное представление.
Разделим исходный код на группы по 4 разряда.
2 = 0100 0000 1011 0000 0000 0000 0000 0000 2
Получаем число:
0100 0000 1011 0000 0000 0000 0000 0000 2 = 40B00000 16
Рекомендуем также
Представление чисел в компьютере
Обычно входные и выходные данные представляются в форме, удобной для
человека. Числа люди привыкли изображать в десятичной системе счисления. Длякомпьютера удобнее двоичная система. Это объясняется тем, что технически гораздопроще реализовать устройства (например, запоминающий элемент) с двумя, а не сдесятью устойчивыми состояниями (есть электрический ток — нет тока, намагничен —не намагничен и т.п.). Можно считать, что одно из двух состояний означает единицу,другое — ноль.
Любые данные (числа, символы, графические и звуковые образы) в компьютере представляются в виде последовательностей из нулей и единиц. Эти последовательности можно считать словами в алфавите {0,1}, так что обработку данных внутри компьютера можно воспринимать как преобразование слов из нулей и единиц по правилам, зафиксированным в микросхемах процессора. Такой взгляд роднит вычислительные машины с абстрактными вычислителями. Вспомните машины Тьюринга или нормальные алгоритмы Маркова. Элемент последовательности из нулей и единиц (член такой последовательности) называют битом. Именительный падеж — бит.
Отображение внешней информации во внутреннее представление называется
кодированием. Кодом ( франц. code, от лат. codex — свод законов) называют как сам способ отображения, так и множество слов (кодовых комбинаций), используемых при кодировании.
Числа в памяти компьютера
Существуют два способа представления чисел в памяти ЭВМ. Они называются так: форма с фиксированной точкой и форма с плавающей точкой. Форма с фиксированной точкой применяется к целым числам, форма с плавающей точкой — к вещественным числам (целым и дробным). Под точкой здесь подразумевается знак-разделитель целой и дробной части числа.
Целые отрицательные числа.
Разберемся, как представляются отрицательные числа. Казалось бы, для этого достаточно заменить 0 на 1 в старшем (31-м) разряде ячейки памяти. Однако реально это делается несколько сложнее. Для представления отрицательных целых чисел используется дополнительный код.
Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.
Получить дополнительный код можно следующим путем:
записать внутреннее представление положительного числа X;
записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
к полученному числу прибавить 1.
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
1 | 00000000 | 00000000 | 00010101 | 1111110 |
2 | 11111111 | 11111111 | 11101010 | 00000011 |
3 | 11111111 | 11111111 | 11101010 | 00000100 |
Шестнадцатеричная форма результата: FF FF ЕА 04.
Старший разряд в представлении любого отрицательного числа равен 1. Следовательно, он указывает на знак числа и поэтому называется знаковым разрядом.
Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле: А — В = А + (-В).
Если значение (-В) будет иметь форму дополнительного кода, то в памяти ЭВМ получится правильный результат.
Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.
00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 = 1 00000000 00000000 00000000 00000000
Что и требовалось доказать! Единица в старшем разряде, получаемая при сложении, выходит за границу разрядной сетки машинного слова и исчезает.
Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
1 | 10000000 | 00000000 | 00000000 | 00000000 |
2 | 01111111 | 11111111 | 11111111 | 11111111 |
3 | 10000000 | 00000000 | 00000000 | 00000000 |
Полученный код используется для представления значения -231 = -2147483648.
Следовательно, диапазон представления целых чисел в 32-разрядном машинном слове: -231 <= Х <= 231-1, или -2147483648 <= Х <= 2147483647.
В общем случае для N-разрядного машинного слова этот диапазон такой:
-2N-1 <= X <= 2N-1-1.
В современных компьютерах часто используется 16- разрядное представление целых чисел. В этом случае их диапазон следующий:
-215 <= Х <= 215-1, или -32768 <= Х <= 32767.
Выход результатов вычислений за границы допустимого диапазона называется переполнением. Переполнение при вычислениях с фиксированной точкой не вызывает прерывания работы процессора. Машина продолжает считать, но результаты могут оказаться неправильными.
Вещественные числа. Числовые величины, которые могут принимать любые значения (целые и дробные) называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с веществен-ными числами. Как же такие числа представляются в памяти компьютера?
Вещественные числа в памяти компьютера представляются в форме с плавающей точкой.
Форма с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления р в некоторой целой степени n, которую называют порядком: R = m * рn
Например, число 25,324 можно записать в таком виде: 0.25324х102. Здесь m=0.25324 — мантисса, n=2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная точка в мантиссе. Отсюда название «плавающая точка».
Однако справедливы и следующие равенства: 25,324 = 2,5324*101 = 0,0025324*104 = 2532,4*102 и т.п.
Получается, что представление числа в форме с плавающей точкой неоднозначно? Чтобы не было неоднозначности, в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализован-ном представлении должна удовлетворять условию: 0,1p <= m < 1p.
Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. Значит для рассмотренного числа нормализованным представлением будет: 0.25324 * 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (р=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:
± машинный порядок | М А | Н Т И С | С А |
1-й байт 2-й байт 3-й байт 4-й байт
В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 1 — минус. Оставшиеся 7 бит первого байта содержат машинный порядок. В следующих трех байтах хранятся значащие цифры мантиссы.
Что такое машинный порядок? В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127. Всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:
Машинный порядок | 0 | 1 | 2 | 3 | … | 64 | 65 | … | 125 | 126 | 127 |
Математический порядок | -64 | -63 | -62 | -61 | … | 0 | 1 | … | 61 | 62 | 63 |
Если обозначить машинный порядок Мр, а математический — р, то связь между ними ыразится такой формулой: Мр = р + 64 .
Итак, машинный порядок смещен относительно математического на 64 единицы и имеет только положительные значения. При выполнении вычислений с плавающей точкой процессор это смещение учитывает.
Полученная формула записана в десятичной системе. Поскольку 6410=4016 (проверьте!), то в шестнадцатеричной системе формула примет вид: Мр16 = р16 + 4016
И, наконец, в двоичной системе: Мр2 = р2+100 00002
Теперь мы можем записать внутреннее представление числа 25,324 в форме с плавающей точкой.
1. Переведем его в двоичную систему счисления с 24 значащими цифрами.
25,32410= 11001,01010010111100011012
2. Запишем в форме нормализованного двоичного числа с плавающей точкой:
0,110010101001011110001101*10101
Здесь мантисса, основание системы счисления (210=102) и порядок (510=1012)записаны в двоичной системе.
3. Вычислим машинный порядок.
Мр2 = 101 + 100 0000 = 100 0101
4. Запишем представление числа в ячейке памяти.
01000101 | 11001010 | 10010111 | 10001101 |
Это и есть искомый результат. Его можно переписать в более компактной шестнадцатеричной форме:
Для того, чтобы получить внутреннее представление отрицательного числа -25,324,достаточно в полученном выше коде заменить в разряде знака числа 0 на 1.
Получим:
11000101 | 11001010 | 10010111 | 10001101 |
А в шестнадцатеричной форме:
Никакого инвертирования, как для отрицательных чисел с фиксированной точкой, здесь не происходит.
Рассмотрим, наконец, вопрос о диапазоне чисел, представимых в форме с плавающей точкой. Очевидно, положительные и отрицательные числа расположены симметрично относительно нуля. Следовательно, максимальное и минимальное числа равны между собой по модулю: Rmax = |Rmin|. Наименьшее по абсолютной величине число равно нулю. Чему же равно Rmax? Это число с самой большой мантиссой и самым большим порядком: 0,111111111111111111111111*1021111111
Если перевести в десятичную систему, то получится Rmax = (1 — 2-24) * 264 = 1019
Очевидно, что диапазон вещественных чисел значительно шире диапазона целых чисел. Если в результате вычислений получается число по модулю большее, чем Rmax, то происходит прерывание работы процессора. Такая ситуация называется переполнением при вычислениях с плавающей точкой. Наименьшее по модулю ненулевое значение равно: (1/2) * 2-64=2-66.
Любые значения, меньшие данного по абсолютной величине, воспринимаются процессором как нулевые.
Как известно из математики, множество действительных чисел бесконечно и непрерывно. Множество же вещественных чисел, представимых в памяти ЭВМ в форме с плавающей точкой, является ограниченным и дискретным. Каждое следующее значение получается прибавлением к мантиссе предыдущего единицы в последнем (24-м) разряде. Количество вещественных чисел, точно представимых в памяти машины, вычисляется по формуле: N = 2t * ( U — L+ 1) + 1.
Здесь t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Для рассмотренного нами варианта (t = 24, U = 63, L = -64) получается: N = 2 146 683 548.
Все же остальные числа, не попадающие в это множество, но находящиеся в диапазоне допустимых значений, представляются в памяти приближенно (мантисса обрезается на 24-м разряде). А поскольку числа имеют погрешности, то и результаты вычислений с этими числами также будут содержать погрешность. Из сказанного следует вывод: вычисления с вещественными числами в компьютере выполняются приближенно.
Презентация: http://www.slideshare.net/Moravskiy/ss-9083291
Источники информации
http://7sch.ucoz.ru/index/puteshestvie_v_istoriju_chisel_sistemy_schislenija/0-147
http://uchebnik1.narod.ru/chislo.html
http://www.slideshare.net/Moravskiy/ss-9083291
Практическая работа №3 Представление чисел
Практическая работа 3
(2 часа)
Представление информации в различных системах счисления
Цель работы. Изучение методов перевода чисел из одной системы счисления в другую. Изучение способов представления числовой информации в компьютере
План
Изучить методы перевода целых чисел из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления
Изучить методы перевода правильных дробей из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления
Изучить методы перевода вещественных чисел из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления
Изучить методы перевода чисел из двоичной, восьмеричной и шестнадцатеричной систем счисления в десятичную систему счисления
Изучить методы перевода чисел из двоичной системы счисления в восьмеричную и шестнадцатеричную системы счисления и наоборот
Изучить представление целых и вещественных чисел в компьютере
Ответить на контрольные вопросы
Краткие сведения
В двоичной системе счисления все числа записываются с помощью двух цифр 0 или 1, основание (базис) двоичной системы счисления q=2.
В восьмеричной системе счисления все числа записываются с помощью восьми цифр 0, 1, 2, 3, 4, 5, 6, 7, основание восьмеричной системы счисления q=8.
В десятичной системе счисления все числа записываются с помощью десяти цифр 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
В шестнадцатеричной системе счисления все числа записываются с помощью шестнадцати цифр 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A (количественный эквивалент числа 10), B (11), C (12), D(13), E (14), F (15), базис шестнадцатеричной системы счисления q=16. Рассмотрим соотношение цифр и чисел в различных системах счисления (Таблица 1).
Таблицы чисел в различных системах счисления Таблица 110-я | 2-я | 8-я | 16-я |
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
16 | 10000 | 20 | 10 |
Для того чтобы перевести целую часть числа из десятичной системы счисления в двоичную, восьмеричную, шестнадцатеричную, необходимо: 1. Последовательно делить данное число и получаемые при делении целые частные на основание q новой системы счисления (2, 8 или 16), выражая промежуточный результат цифрами исходной системы, до тех пор, пока частное не станет равным нулю. 2. Полученные остатки, фактически являющиеся цифровым выражением числа в новой системе, привести в соответствие с алфавитом этой системы счисления (имеются в виду системы счисления с основанием больше 10). 3. Записать число в новой системе счисления, начиная с последнего остатка. | Пример 1. Перевести число 2310 в двоичную систему счисления.
Получаем 2310=101112 |
Для того, чтобы выполнить перевод правильных дробей из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную необходимо последовательно умножать правильную дробь и получаемые дробные части произведений на основание системы q до тех пор, пока дробная часть произведения не станет равной нулю или не будет достигнута требуемая точность представления числа.
Полученные целые части произведений, являющиеся цифрами числа в новой системе счисления, привести в соответствие с алфавитом новой системы счисления. Составить дробную часть числа в новой системе счисления, начиная с целой части первого произведения.
Пример 2. Перевести число 0,6562510 в восьмеричную систему счисления.
0, | 65625 х 8 |
5, | 25000 |
2, | 00000 |
Получаем: 0,6562510 = 0,528
Перевод вещественных чисел, т.е. чисел, содержащих целую и дробную части, осуществляется в два этапа. Отдельно переводится целая часть, отдельно — дробная. В итоговой записи полученного числа целая часть отделяется от дробной запятой.
Пример 3. Перевести число 156,35610 в шестнадцатеричную систему счисления. Представим число в виде суммы целой и дробной части 156,35610=15610+0,35610 Переводим целую часть 15610 в шестнадцатеричную систему счисления:
Получаем 15610=9С16 | Переводим дробную часть 0,35610 в шестнадцатеричную систему счисления:
Получаем: 0,35610 0,5В216. |
Таким образом, 9С16+0,5В216=9С,5В216. Получаем: 156,35610 9С,5В216
При переводе чисел из системы счисления с основанием q в десятичную систему счисления необходимо пронумеровать разряды целой части справа налево, начиная с нулевого, и дробной части, начиная с разряда сразу после запятой, слева направо – начальный номер -1. Затем вычислить сумму произведений соответствующих значений разрядов на основание q системы счисления в степени, равной номеру разряда
Пример 4. Перевести число 10110110111,1012 в десятичную систему счисления
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | -1 | -2 | -3 |
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1, | 1 | 0 | 12=1*29+0*28+1*27+1*26+0*25+1*24+1*23+0*22+1*21+ |
+1*20+1*2-1+0+2-2+1*2-3= =512+0+128+64+0+16+8+0+2+1+0,5+0+0,125=731,62510
Если необходимо перевести число из двоичной системы счисления в систему счисления, основанием которой является степень двойки, достаточно объединить цифры двоичного числа в группы по столько цифр, каков показатель степени. При этом в целой части числа группировка производится справа налево, а в дробной слева направо. Если в последней группе недостает цифр, дописываются нули: в целой части — слева, в дробной – справа. Затем каждая группа заменяется цифрой новой системы счисления (Таблица 1).
При переводе чисел из системы счисления, основанием которой является степень двойки, в двоичную систему счисления необходимо каждую цифру заменить группой по столько цифр двоичной системы счисления, каков показатель степени. Затем записать цифры слева направо.
Пример 5. Перевести число 1011010010111,10112 в восьмеричную систему счисления
Разбиваем число на тройки цифр и заменяем каждую триаду восьмеричной цифрой:
001 011 010 010 111,101 1002
1 3 2 2 7 5 4
Получим 1011010010111,1011002=13227,548
Пример 6. Перевести число 801А9Е,3F16 в двоичную систему счисления
Заменим каждую цифру четверкой двоичных цифр: 8 0 1 А 9 Е, 3 F16
1000 0000 0001 1010 1001 1110 0011 1111
Получим 801А9Е,3F16=100000000001101010011110,001111112
Задания к практической работе
1) Выполнить перевод целых чисел из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2) Выполнить перевод правильных дробей из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3) Выполнить перевод вещественных чисел из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4) Выполнить перевод чисел из двоичной, восьмеричной и шестнадцатеричной систем счисления в десятичную систему счисления
а) Выполнить перевод числа из двоичной системы счисления в десятичную:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
б) Выполнить перевод числа из восьмеричной системы счисления в десятичную:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в) Выполнить перевод числа из шестнадцатеричной системы счисления в десятичную:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5) Выполнить перевод чисел из двоичной системы счисления в восьмеричную и шестнадцатеричную системы счисления и наоборот.
а) Выполнить перевод чисел из двоичной системы счисления в восьмеричную и шестнадцатеричную:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
б) Выполнить перевод чисел из восьмеричной системы счисления в двоичную:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в) Выполнить перевод чисел из шестнадцатеричной системы счисления в двоичную:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Контрольные вопросы
Обязательная часть
Чем отличаются позиционные система счисления от непозиционных?
Почему в компьютере используется двоичная система счисления?
Какие формы записи применяются в компьютерной технике для кодирования целых чисел со знаком?
В чем заключается преимущество экспоненциальной формы числа?
Дополнительная часть
Запишите числа в прямом коде (формат 1 байт): 31; 65;-63;-128
Запишите числа в обратном коде (формат 1 байт): -9; -127; -15; -128
Запишите числа в дополнительном коде (формат 1 байт): -9; -127; -15; -128
Переведите пары чисел в двоичную систему счисления и произведите арифметические операции: 36 и 4; 75 и 5; 12 и 4. Ответы проверьте.
ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В ПАМЯТИ КОМПЬЮТЕРА ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ
ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В ПАМЯТИ КОМПЬЮТЕРА
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ Любая информация в ЭВМ представляется в виде двоичных кодов. Отдельные элементы двоичного кода, принимающие значение 0 или 1, называют разрядами или битами. Память компьютера условно делиться на отсеки или ячейки, каждая из которых имеет свой номер. Нумерация начинается с нуля. Минимальной адресуемой ячейкой памяти называется байт – 8 двоичных разрядов. порядковый номер байта называется его адресом. Наибольшую последовательность битов, которую процессор может обрабатывать как единое целое, называют машинным словом. Длина машинного слова может быть разной — 8 , 16 , 32 бит и т. д. Двоичные разряды в любой ячейке памяти нумеруются справа налево, начиная с нуля. Существуют два основных формата представления чисел в памяти компьютера. Один из них используется для кодирования целых чисел, второй (так называемое представление числа в формате с плавающей точкой) используется для задания некоторого подмножества действительных чисел. Для положительных и отрицательных чисел существует знаковый способ представления числа. Под знак отводится старший разряд ячейки: 0 — для положительных чисел, 1 — для отрицательных чисел. 2
Для упрощения реализации арифметических операций в компьютере целые числа представляются специальными кодами — прямым, обратным и дополнительным. Для положительного числа прямой, обратный и дополнительный коды выглядят одинаково. Прямой код двоичного числа — это само двоичное число, причем значение знакового разряда для положительных чисел равно 0, а для отрицательных чисел -1. Обратный код отрицательного числа получается из прямого кода путем замены нулей единицами, а единиц нулями, исключая знаковый разряд. Дополнительный код отрицательного числа образуется как результат суммирования обратного кода с единицей младшего разряда. Перенос в знаковый разряд при этом теряется. Примечание. Дополнительный код основан на понятии дополнения числа величины, которую надо добавить к числу, чтобы получить переход единицы в старшем разряде. Дополнением k-разрядного целого числа Z в системе счисления с основанием q называется величина: D = q k — Z. 3
Пример 1. Определить прямой, обратный и дополнительный коды следующих двоичных чисел: а)100100; б) -100011; в) -100100. Решение Будем считать, что число размещается в двух байтах. Старший бит – знак разряда. Незначащие нули добавляются слева от числа. Результат представим в виде таблицы: Прямой код Обратный код Дополнительный код 100100 0000000000100100 -100011 100000100011 11111011100 11111011101 -100100 100000100100 11111011011 11111011100 Число 4
Пример 2. Как будет представлено в памяти компьютера целое число 1234510 ? Решение Для размещения числа возьмем два байта. Поскольку число положительное, то в старшем (15 -м) бите будет 0. Переведем число в двоичную систему счисления: 1234510 = 110000001110012. Результат: 0 Знак числа 0110000 00111001 число 5
ЦЕЛОЧИСЛЕННАЯ ДВОИЧНАЯ АРИФМЕТИКА В ЭВМ 6
Особенности двоичной системы счисления позволяют создавать специфические алгоритмы вычитания и умножения двоичных чисел, наиболее подходящие для аппаратной реализации. Целочисленная двоичная арифметика используется при изучении программирования, в процессе освоения операторов цикла, оператора выбора, стандартных процедур val и str, операций над целыми числами div и mod, операций над строковыми величинами. Сложение чисел производится в дополнительных кодах поразрядно. При выполнении арифметических операций число может выйти за указанные границы. Произойдет переполнение разрядной сетки, поэтому при работе с большими целыми числами под них выделяется больше места, например 4 байта. Чтобы избежать ситуации переполнения, в языках программирования предусмотрено строгое описание типа переменной, которым определяется набор возможных ее значений. Вычитание целых чисел эквивалентно сложению с отрицательным числом. Отрицательное число может быть представлено в прямом коде. Однако использование прямого кода усложняет структуру команд процессора. При выполнении сложения чисел с разными знаками требуется выбрать из них большее по модулю, затем вычесть из него меньшее, выяснить знак большего и присвоить этот знак остатку. По этой причине в компьютерах используется представление отрицательного числа в дополнительном коде. Таким образом, операция вычитания выполняется как сложение с дополнительным кодом вычитаемого. 7
Операции умножения и деления выполняются в прямом коде с использованием итерационных алгоритмов (ряда повторяющихся шагов). Умножение двоичных чисел сводится к двум операциям: сложения и сдвига. Операция деления для целых чисел однозначно не определена, поскольку в общем случае приводит к появлению нецелых (вещественных) чисел. Существуют различные методы и алгоритмы реализации этой операции в разных процессорах. Пример 1. Выполнить операцию вычитания 25 -34. Учтем, что 25 -34 = 25+ (-34). Переведем числа 25 и 34 в двоичную систему счисления: 2510 = 110012 и 3410 = 1000102. Запишем прямые, обратные и дополнительные коды, воспользовавшись 8 -разрядной сеткой: Число Прямой код Обратный код Дополнительный код 25 00011001 -34 10100010 11011110 После сложения дополнительных кодов получим код 11110111. Единица в старшем бите полученного кода означает, что число отрицательное. Следовательно, результат надо перевести в обратный, а затем в прямой код: 11110111 -> 10001001. Полученный результат интерпретируется как десятичное число: -10012= -910. 8
ПРЕДСТАВЛЕНИЕ ВЕЩЕСТВЕННЫХ ЧИСЕЛ 9
В отличие от целых чисел, которые представляются в памяти машины абсолютно точно, значения вещественных чисел являются приближенными. В некоторых областях вычислений требуются очень большие или малые действительные числа. Для получения большей точности применяют запись чисел с плавающей точкой. В общем случае в формате с плавающей точкой число представляется в виде произведения двух сомножителей: R=m*Pn где m -мантисса числа; Р — основание системы счисления; n — порядок, указывающий, на какое количество позиций и в каком направлении должна сместиться точка, отделяющая дробную часть в мантиссе. Например, число 5, 14 может быть записано 0, 514∙ 101 или 51, 4∙ 10 -1 и т. д. Запятая (десятичная точка) перемещается, или «плавает» , вправо и влево в зависимости от порядка числа. При работе с числами в языках программирования и вычислительных системах используется экспоненциальная форма записи: R = m∙E±n, где Е — десятичное основание системы. Например, 3, 1467890000 Е + 2 = 314, 6789 Нормализованная мантисса меньше единицы и первая значащая цифра не ноль. 10
РАЗМЕЩЕНИЕ ЧИСЕЛ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ 11
Метод представления вещественных чисел в памяти компьютера предполагает хранение двух чисел: мантиссы и порядка. Чем больше разрядов отводится под запись мантиссы, тем выше точность представления числа. Чем больше разрядов занимает порядок, тем шире диапазон чисел, представимых в машине при заданном формате. Правила кодирования мантиссы и порядка отличаются для различных типов машин. Рассмотрим для начала один из вариантов представления вещественных чисел. Для размещения вещественного числа могут использоваться четыре байта (32 бита) — короткий формат, 8 байтов длинный формат, 16 байтов — формат повышенной точности. В любом случае старший байт остается постоянным, а изменяется область, отведенная под мантиссу. Старший байт включает в себя: один бит (старший) — знак числа; один бит — знак порядка; шесть битов — порядок числа. В таком представлении максимальный порядок числа равен 1111112 = 6310. Следовательно, 1063 — максимальное число, которое можно закодировать таким образом: Третий байт порядок знак порядка знак мантиссы Второй байт Первый байт Нулевой байт мантисса 12
Пример 1. Как будет представлено в памяти компьютера число — 123, 4510 ? Решение Представим число в 4 байтах. Нормализованный вид: -0, 12345∙ 103. Число отрицательное, поэтому старшим (31 -й) бит равен 1. Порядок равен 3, он положительный, значит, З 0 -й бит равен 0. Число 3 в двоичной системе счисления имеет вид 11. Чтобы записать его в оставшихся 6 битах старшего байта, необходимо добавить незначащие нули. Таким образом, старший байт имеет вид: 10000011. Найдем двоичное представление мантиссы 0, 12345 по алгоритму перевода дробной части, 24 раза умножив ее на 2. Результат: Пример 2. Раскодировать содержимое четырех байтов памяти: а) как два целых числа; б) как одно вещественное: 01000101 10000000 Решение а) 17793; -128; б) приблизительно 0, 5058593 • 10 -3 (порядок записан в дополнительном коде). 13
Положительные и отрицательные значения порядка существенно усложняют обработку вещественных чисел. Поэтому во многих современных компьютерах используют не прямое значение порядка, а смещенное. Его называют характеристикой числа. Для разных типов ЭВМ существуют разные варианты смещения порядка. Рассмотрим один из вариантов. Запись вещественного числа имеет структуру следующего вида: n-1 n-2 ∙∙∙ Знак мантиссы Смещенный порядок ∙∙∙ Абсолютная величина мантиссы Здесь порядок n-разрядного нормализованного числа задается в смещенной форме: если для задания порядка выделено k разрядов, то к истинному значению порядка прибавляют смещение, равное 2 k-1. Например, порядок, принимающий значения в диапазоне от -64 до +63, представляется смещенным порядком, значения которого меняются от 0 до 127. Прокомментируем этот случай. В семи двоичных разрядах помещаются двоичные числа от 0000000 до 1111111. В десятичной системе счисления это числа от 0 до 127. Всего 128 значений, которые разделяются поровну между положительными и отрицательными значениями порядка в диапазоне от -63 до 63. Связь между смещенным порядком S и математическим Р в данном случае выражается формулой: S = Р + 6410 = P + 100 00002. 14
Пример 3. Записать внутреннее представление числа 250, 1875 в форме с плавающей точкой в 4 -х байтовом машинном слове. Решение: 1. Переведем число в двоичную систему счисления с 24 значащими цифрами (3 байта под мантиссу): 250. 187510= 11111010, 00110000002. 2. Запишем в форме нормализованного двоичного числа с плавающей точкой: 0, 111110100011000000∙ 1010002. Здесь мантисса, основание системы счисления (210 = 102) и порядок (810 = 10002) записаны в двоичной системе. 3. Вычислим характеристику: S 2 =1000 + 1000000 = 1001000. 4. Запишем представление числа в 4 -байтовой ячейке памяти с учетом знака числа: 0 1001000 11111010 00110000 Шестнадцатеричная форма: 48 FA 3000. 15
СЛОЖЕНИЕ ЧИСЕЛ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ 16
Выполнение арифметических действий над числами с плавающей запятой гораздо сложнее целочисленной арифметики. Для некоторых процессоров (в частности Intel) операции над вещественными числами вынесены в отдельный узел, который называют математическим сопроцессором. Сложение чисел с плавающей запятой выполняется в соответствии со следующим алгоритмом. 1. Представить числа А и В в нормализованном виде, записав отдельно значения мантисс и порядков. 2. Выровнять порядки по числу с большим порядком. 3. Выровнять число цифр в мантиссах по числу, порядок которого не изменился. 4. Сложить числа. 5. Нормализовать сумму, оставив число цифр в мантиссе таким, как у числа, порядок которого не изменялся. 17
Пример. Найти сумму чисел А = 9, 6098 и В = 98, 009 по правилу сложения чисел с плавающей запятой. Решение: Результат представим в виде таблицы: Шаг Число Нормализованное число Порядок Мантисса Число цифр в мантиссе 1 А=9, 6098 0, 96098∙ 101 1 96098 5 В=98, 009 0, 98009∙ 102 2 98009 5 2 А 0, 096098∙ 102 2 096098 6 3 А 0, 09609∙ 102 2 09609 5 4 А+В 1, 07618∙ 102 2 — — 5 А+В 0, 101761∙ 103 3 10761 5 18
Действительные числа и числовая точность
Введение
Важным аспектом вычислительной физики является числовая точность. Спроектировать хороший алгоритм, нужно иметь базовое представление о распространении неточностей и ошибки, связанные с расчетами. Нет волшебного рецепта для борьбы с недостаточным потоком , избыточным потоком , накопление ошибок и потеря точности , и только тщательный анализ функций участие может спасти от серьезных проблем.
Поскольку нас интересует точность численного исчисления, нам нужно понимать как компьютеры представляют действительные и целые числа. Большинство компьютеров работают с действительными числами в двоичной системе, или восьмеричной и шестнадцатеричной, в отличие от десятичной системы, которую мы люди предпочитают использовать. В двоичной системе за основу берется 2, почти так же, как и в двоичной системе. В десятичной системе используется 10. Поскольку обычный компьютер общается с нами в десятичной системе, но работает внутренне, например, в двоичной системе, должны выполняться процедуры преобразования. на компьютере, и эти преобразования, как мы надеемся, включают только небольшие ошибки округления
Компьютеры также не могут работать с действительными числами, выраженными более чем фиксированное количество цифр, а возможный набор значений — это только подмножество математических целые или действительные числа.Так называемая длина слова, которую мы резервируем для данного числа, помещает ограничение на точность представления данного числа. Это, в свою очередь, означает что, например, плавающие числа всегда округляются до машинно-зависимой точности, обычно с 6-15 ведущими цифрами справа от десятичной точки. Кроме того, каждый такой Набор значений имеет наименьшее отрицательное и наибольшее положительное значение, зависящее от процессора. Почему мы вообще заботимся о округлении и точности станка?
Пример: потеря точности при вычитании почти равных чисел
Предположим, что мы можем представить плавающее число с точностью до 5 цифр только справа от десятичной точки.Это не что иное, как наш выбор, он имитирует способ представления чисел в машине. Затем мы пытаемся оценить функцию
f (x) = 1 − cosxsinx {\ displaystyle f (x) = {\ frac {1- \ cos x} {\ sin x}}}
для малых значений x {\ displaystyle x}. Обратите внимание, что мы также можем переписать это выражение, умножив знаменатель и числитель на 1 + cos (x) {\ displaystyle 1 + cos (x)}, чтобы получить эквивалентное выражение
f (x) = sinx1 + cosx {\ displaystyle f (x) = {\ frac {\ sin x} {1+ \ cos x}}}.{-2}}
, что также является точным результатом. В первом выражении из-за нашего выбора точности у нас есть только одна значимая цифра в числителе после вычитания. Это приводит к потере точности и неверному результату из-за отмены двух почти равных чисел . Если бы мы выбрали точность в шесть ведущих цифр, оба выражения дали бы один и тот же ответ. Если бы мы оценили x∼π {\ displaystyle x \ sim \ pi}, то второе выражение для f (x) {\ displaystyle f (x)} может привести к потенциальной потере точности из-за отмены почти равных чисел.
Этот простой пример демонстрирует потерю числовой точности из-за ошибок округления, , где количество ведущих цифр теряется при вычитании двух почти равных чисел . Урок, который следует извлечь, состоит в том, что мы не можем вычислить функцию вслепую. Нам всегда нужно будет тщательно анализировать наш алгоритм в поисках потенциальных ловушек. Однако волшебного рецепта не существует, единственным ориентиром является понимание того факта, что машина не может правильно отображать все числа.{2} + bx + c = 0}
, где a = 1 {\ displaystyle a = 1}, b = −12,4 {\ displaystyle b = -12,4} и c = 0,494 {\ displaystyle c = 0,494}, вычисляя квадратную формулу с использованием трехзначной десятичной арифметики и беспристрастное округление. Точные корни, округленные до 6 цифр, составляют 0,0399675 и 12,3600.
Этот пример иллюстрирует важную числовую проблему, называемую отменой или потерей значимости, которая проявляется при вычитании значений почти равной величины. Отмена происходит, когда цифры, необходимые для точного определения разницы, были отброшены округлением в предыдущих вычислениях из-за конечной точности машинной арифметики.Проблемы возникают, когда эта разница является промежуточным результатом, который необходимо использовать для завершения вычисления — большинство значащих цифр, которые остаются после округления, удаляются вычитанием.
Чтобы усложнить ситуацию, цифры, которые становятся значимыми после вычитания, могут иметь точность только до нескольких разрядов из-за предыдущих ошибок округления в двух вычитаемых значениях. {2} -4ac}}}. .{2} + bx + c = 0}, произведение корней, r1r2 = c / a {\ displaystyle r_ {1} r_ {2} = c / a}. Таким образом, второй корень может быть получен путем деления, что позволяет обойти проблему отмены, описанную выше.
Два разных алгоритма решения квадратного уравнения закодированы в функциях gquad_solver.m и bquad_solver.m на странице примеров кода.
Представление действительных чисел в цифровых компьютерах: одинарная и двойная точность
Действительные числа хранятся с десятичной точностью (или мантиссой) и диапазоном десятичной экспоненты.{-5}}
, и он имеет точное представление машинного номера, поскольку нам нужно конечное число битов для представления этого числа. Однако это представление не очень практично. Скорее, мы предпочитаем использовать научную нотацию. В десятичной системе мы записали бы число вроде 9,
в так называемом нормализованном научном представлении. Это просто означает, что десятичная точка сдвинута и предоставлены соответствующие степени 10. {- 7}}.{38}}, где 128 связано с тем, что 8 бит зарезервированы для экспонента.Модификация научного представления двоичных чисел требует, чтобы первая двоичная цифра 1 располагалась слева от двоичной точки. В этом случае представление мантиссы q {\ displaystyle q} будет (1.f) 2 {\ displaystyle (1.f) _ {2}} и 1≤q <2 {\ displaystyle 1 \ leq q <2 }. Эта форма весьма полезна при хранении двоичных чисел в машинном слове, поскольку мы всегда можем предположить, что там находится ведущий бит 1.{-23}}
В качестве примера рассмотрим 32-битное двоичное число
(10111110111101000000000000000000) 2 {\ displaystyle (10111110111101000000000000000000) _ {2}}
, где первый бит зарезервирован для знака, 1 в этом случае дает отрицательный знак. Показатель m {\ displaystyle m} задается следующими 8 двоичными числами 01111101 {\ displaystyle 01111101}, что дает 125 в десятичной системе. Однако, поскольку показатель степени состоит из восьми битов, это означает, что он имеет 28−1 = 255 {\ displaystyle 2 ^ {8} -1 = 255} возможных чисел в интервале −127≤m≤127 {\ displaystyle -127 \ leq m \ leq 127}, наш окончательный показатель степени равен 125−127 = −2 {\ displaystyle 125-127 = -2}, что дает 2−2 {\ displaystyle 2 ^ {- 2}}.{-5} \ right) = (-0,4765625) _ {10}}
В этом случае у нас есть точное машинное представление с 32 битами (на самом деле нам нужно менее 23 бит для мантиссы). Если наше число x {\ displaystyle x} может быть точно представлено в машине, мы называем такое x {\ displaystyle x} номер машины .
К сожалению, большинство чисел не могут быть вычислены в автомате и поэтому могут быть только аппроксимированы. Когда такое число появляется в результате чтения некоторых входных данных или вычислений, неизбежная ошибка возникает при представлении его как можно точнее с помощью машинного номера.Поэтому плавающее число x {\ displaystyle x}, обозначенное как fl (x) {\ displaystyle fl (x)}, всегда будет представлено как
fl (x) = x (1 ± εx) {\ displaystyle fl (x) = x (1 \ pm \ varepsilon _ {x})}
, где x {\ displaystyle x} точное число и ошибка | εx | ≤ | εM | {\ displaystyle | \ varepsilon _ {x} | \ leq | \ varepsilon _ {M} |}, где εM {\ displaystyle \ varepsilon _ {M}} — назначенная точность. Число вроде 1/10 {\ displaystyle 1/10} не имеет точного двоичного представления с одинарной или двойной точностью. Поскольку мантисса
1.{-52}} соответственно. для одинарной и двойной точности соответственно.
Целочисленное и числовое представление с плавающей запятой
1) Целочисленное представление
Напомним, что целое число со знаком называется целым числом со знаком. Целое число со знаком имеет положительные или отрицательные знаки. Знаки представлены в компьютере в двоичном формате как 1 для — (минус) и 0 для (плюс) или наоборот. Знаковый бит всегда кодируется как крайний левый бит для представления знака числа.
Например, положительные числа со знаком представлены в форме, называемой формой величины со знаком. В этой форме знак представлен двоичным 0, а оставшаяся величина — эквивалентной двоичной формой.
+7 представляется как 0 0000111
Отрицательные целые числа со знаком могут быть представлены в любой из следующих форм:
а) подписанный — звездной величины
б) подписано — Форма комплимента 1
c) подписано — Форма комплимента 2
В форме величины со знаком знак числа представлен как I, а величина — в эквивалентной двоичной форме.
Пример:
-7 представляется как 1 0000111
В форме дополнения до единицы со знаком знак целого числа обозначен 1, а величина показана в форме дополнения до единицы следующим образом:
-7 представляется как 1 1 1 1 1000
В приведенном выше бланке дополнения «-2» знак обозначен цифрой 1, а величина — бланком дополнения 2 следующим образом:
-7 представлен 1 1111001
2) Представление с плавающей запятой
В большинстве приложений часто используется дробь.Система представления чисел, которая отслеживает положение двоичной и десятичной точки, лучше, чем представление с фиксированной точкой. Эта система называется представлением с плавающей точкой.
Действительное число — это как целая, так и дробная часть. Действительное число также называется числом с плавающей запятой. Эти числа либо положительные, либо отрицательные. Действительное число 454,45 можно записать как 4,5445 * 10 2 или 0,45445 * 10 3 . Этот тип представления числа называется научным представлением.Используя эту научную форму, любое число может быть выражено как комбинация мантиссы и экспоненты, или мы можем сказать, что число n может быть выражено как n = mre, где m — мантисса, r — основание системы счисления, а e — показатель степени. Мантисса — это число с фиксированной точкой. Показатель степени указывает положение двоичной или десятичной точки. Например число 454,45
0,45445 3
Показатель мантиссы
Ноль в крайнем левом положении мантиссы и экспоненты указывает на знак плюс.Мантисса может быть дробью или целым числом в зависимости от того, заставляет ли компьютер использовать мантиссу для дробного представления системы.
Пример на C:
1,2 E + 12, 2,5E-2
Конспект лекций — Глава 5
Конспект лекций — Глава 5 — Представление данныхВСЕ О ЦЕЛОМ ПРЕДСТАВИТЕЛЬСТВЕ. --------------------------------- Компьютеры работают с двоичными значениями (в результате того, что они построены из транзисторы). есть разные двоичные представления для целых чисел возможные квалификации: 1.только положительные числа 2. положительные и отрицательные числа 3. легкость восприятия человеком 4. скорость компьютерных операций есть 4 общеизвестных (1 не распространенных) целочисленных репрентации. Все они использовались в разное время по разным причинам. 1. без знака 2. величина знака 3. дополнение 4. дополнение до двух 5. предвзятый (малоизвестный) практически все современные компьютеры работают по системе до двух. представление. Почему? 1. оборудование быстрее 2. железо проще (что делает его быстрее) НЕ ПОДПИСАНО -------- стандартная двоичная кодировка уже указана только положительные значения диапазон: от 0 до 2 ** n - 1, для n бит пример: 4 бита, значения от 0 до 15 n = 4, 2 ** 4-1 это 15 двоичный десятичный шестнадцатеричный двоичный десятичный шестнадцатеричный 0000 0 0 1000 8 8 0001 1 1 1001 9 9 0010 2 2 1010 10 а 0011 3 3 1011 11 б 0100 4 4 1100 12 в 0101 5 5 1101 13 дн. 0110 6 6 1110 14 e 0111 7 7 1111 15 ж ЗНАК МАГНИТУДА -------------- удобочитаемый способ получения как положительных, так и отрицательных целых чисел.Hw, который выполняет арифметические операции с целыми числами знаковой величины не быстро, и он сложнее, чем hw, который выполняет арифметические операции на 1 комп. и 2-е комп. целые числа. используйте 1 бит целого числа для представления знака целого числа пусть знаковый бит 0 будет положительным, 1 быть отрицательным. остальная часть целого числа является величиной с использованием той же кодировки как целые числа без знака пример: 4 бита 0101 это 5 1101 это -5 чтобы получить аддитивное обратное число, просто переверните (не, инвертировать, дополнять, отрицать) знаковый бит.диапазон: - (2 ** (n-1)) + 1-2 ** (n-1) -1 где n - количество бит 4 бита, от -7 до +7 n = 4, - 2 ** 3 + 1 до 2 ** 3 - 1 От -8 + 1 до 8-1 из-за знакового бита есть 2 представления для 0. Это проблема оборудования. . . 0000 - 0, 1000 - 0 компьютер должен производить все вычисления таким образом, чтобы они выходят правильно и одинаково, независимо от того, какое представление используется. ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ---------------- исторически важны, и мы используем это представление, чтобы получить Целые числа с дополнением до 2.Сейчас никто не строит машины, основанные на 1-х комп. целые числа. В прошлом ранние компьютеры, созданные Семуром Крэем (в CDC) были основаны на 1 комп. целые числа. положительные целые числа используют то же представление, что и беззнаковые. 00000 это 0 00111 - 7 и т. Д. отрицание (нахождение аддитивного обратного) выполняется побитовым дополнение к положительному представлению. ДОПОЛНИТЕЛЬНАЯ. ИНВЕРТИРОВАТЬ. НЕТ. КУВЫРОК. ОТРИЦАТЕЛЬНЫЙ. логическая операция, выполняемая с одним битом дополнение до 1 равно 0.дополнение 0 равно 1. -1 -> дубль +1, 00001 дополнить каждый бит 11110 то есть -1. не добавляйте и не убирайте биты. ПРИМЕРЫ: 11100 это должно быть отрицательное число. чтобы узнать что, найдите добавку обратный! 00011 - +3 на вид, поэтому 11100 должно быть -3 на что следует обратить внимание: 1. любое отрицательное число будет иметь 1 в старшем разряде. 2. есть 2 представления для 0, 00000 и 11111. ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ---------------- вариант 1 дополнения, который НЕ имеет двух представлений для 0.Это делает оборудование, которое выполняет арифметические операции, быстрее, чем другие представления. 3-битный пример: битовая комбинация: 100101110111 000 001010 011 Комбинация 1: -3-2-1 0 0 1 2 3 2-х комп .: -4-3-2-1 0 1 2 3 все отрицательные значения "скользят" вниз на единицу, устраняя дополнительное нулевое представление. как получить целое число в 2 комп. представление: положительные значения такие же, как для sign / mag и 1's comp. у них будет 0 в MSB (но это НЕ знаковый бит!) положительный: просто запишите значение, как раньше отрицательный: примите положительное значение 00101 (+5) возьмите 1 комп.11010 (-5 в 1 комп.) добавить 1 + 1 ------ 11011 (-5 в 2-х комп.) чтобы получить аддитивную инверсию целого числа comp 2, 1. возьмите 1 комп. 2. добавить 1 добавить 1, не зная, как добавить: начинать с LSB для каждого бита (работая справа налево) пока бит равен 1, измените его на 0. когда встречается 0, измените его на 1 и остановитесь. остальные биты остаются такими же, как были. ПРИМЕР: какое десятичное значение представляет два дополнения 110011? Это должно быть отрицательное число, так как самый старший бит это 1.Следовательно, найдите аддитивный обратный: 110011 (2 комп.?) 001100 (после дополнения до 1) +1 ------ 001101 (2 комп. +13) Следовательно, его аддитивная инверсия (110011) должна быть -13. НЕМНОГО НА ДОБАВЛЕНИЕ ---------------------- мы увидим, как это сделать на самом деле, в следующей главе, но вот краткий обзор. нести в сумме выполнять 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0011 + b +0001 - ----- сумма 0100 это действительно так же, как мы делаем для десятичных чисел! 0 + 0 = 0 1 + 0 = 1 1 + 1 = 2, что равно 10 в двоичном формате, сумма равна 0 и несет 1.1 + 1 + 1 = 3 сумма равна 1 и несет 1. ПРЕДВАРИТЕЛЬНОЕ ПРЕДСТАВЛЕНИЕ --------------------- целочисленное представление, которое искажает битовые шаблоны так, чтобы выглядят как беззнаковые, но на самом деле представляют собой отрицательные числа. примеры: даны 4 бита, мы значения смещаем на 2 ** 3 (8) ИСТИННАЯ СТОИМОСТЬ, которая будет представлена 3 добавить в смещение +8 ---- беззнаковое значение 11 так что битовая комбинация 3 в 4-битном смещенном 8-представлении будет 1011 идя другим путем, предположим, что нам дали предвзятое представление-8 как 0110 беззнаковый 0110 представляет 6 вычесть смещение - 8 ---- ИСТИННОЕ ЗНАЧЕНИЕ представлено -2 это представление позволяет выполнять операции со смещенными числами быть таким же, как для целых чисел без знака, но фактически представляет как положительные, так и отрицательные значения.выбор предвзятости: выбираемое смещение чаще всего основано на количестве бит доступно для представления целого числа. Чтобы получить прибл. равное распределение истинных значений выше и ниже 0, смещение должно быть 2 ** (n-1) или (2 ** (n-1)) - 1 РАСШИРЕНИЕ ЗНАКА -------------- как преобразовать целое число с меньшим количеством битов в такое же целое число (такое же представление) с большим количеством бит. это должно быть сделано много с помощью арифметических устройств, поэтому лучше всего пройти через это.по представлению: без знака: xxxxx -> 000xxxxx скопируйте исходное целое число в младшие биты и поместите 0 в другое место величина знака: sxxxx -> s000xxxx скопируйте исходную целочисленную величину в младшие биты, поместите исходный знак в MSB и поставьте 0 в другом месте Комбинации 1 и 2: так называемое РАСШИРЕНИЕ ЗНАКА. скопируйте исходное целое число в младшие биты, возьмите MSB исходного целого числа и скопируйте его в другое место. пример: 0010101 000 0010101 11110000 11111111 11110000 ПЕРЕПОЛНЕНИЕ -------- иногда значение не может быть представлено в ограниченном количестве разрешенных бит.Примеры: беззнаковый, 3 бита: для 8 потребуется как минимум 4 бита (1000) знаковая магн., 4 бита: для 8 потребуется не менее 5 бит (01000) когда значение не может быть представлено в разрешенном количестве битов, мы говорим, что произошло переполнение. Переполнение происходит при выполнении арифметические операции. пример: 3-битное представление без знака 011 (3) + 110 (6) --------- ? (9) для представления значение 9 в беззнаковой репутации. ПРЕДСТАВЛЕНИЕ ПЕРСОНАЖА ------------------------ все, что представлено компьютером, представлено двоичными последовательностями.Обычное нецелое число, которое необходимо представить, - это символы. Мы используем стандартные кодировки (двоичные последовательности) для представления символов. ПОМНИТЕ: битовые шаблоны НЕ подразумевают представление Многие устройства ввода-вывода работают с 8-битными величинами. Стандартный код ASCII (Американский стандарт компьютерной информации Interchange) определяет, какой символ представлен каждой последовательностью. Примеры: 0100 0001 - это 41 (шестнадцатеричное) или 65 (десятичное). Он представляет собой "А" 0100 0010 - это 42 (шестнадцатеричное) или 66 (десятичное). Он представляет собой `B ' Для каждого символа используются разные битовые комбинации. что нужно представить.У кода есть несколько хороших свойств. Если битовые комбинации сравниваются, (делая вид, что они представляют собой целые числа), то `A ' предположим, что пользователь вводит "3" результат целое число шаги: для `3 '5` 4' читать "3" переведите `3 'в 3 прочитать "5" переведите `5 'в 5 целое число = 3 * 10 + 5 = 35 читать "4" переведите `4 'в 4 целое число = 35 * 10 + 4 = 354 алгоритм: целое число = 0 пока есть еще персонажи получить характер цифра В реальном мире у нас тоже есть аналогичная проблема, только имея дело с печатью целых чисел.АЛГОРИТМ: целое число -> символьная строка шаги: для 354 (целое число) выясните, сколько символов существует (3) 354 дел. 100 дает 3 переведите 3 в `3 'и распечатайте его 354 по модулю 100 дает 54 54 дел 10 дает 5 переведите 5 в `5 'и распечатайте 54 мод 10 дает 4 4 деление 1 дает 4 переведите 4 в `4 'и распечатайте его 4 мод 1 дает 0, так что все готово ПРИМЕЧАНИЕ. Эти алгоритмы работают одинаково с базами, отличными от 10. Просто измените 10 на желаемую базу. (Есть некоторые дополнительные работать в базах> 10, т.к. надо переводить цифры> 9 в персонажей.Например, 12 (десятичное) - это c (шестнадцатеричное).) ПРЕДСТАВЛЕНИЕ ЧИСЛА ПЛАВАЮЩЕЙ ТОЧКИ ---------------------------------------- Компьютеры представляют реальные ценности в форме, аналогичной форме научная нотация. Существуют стандарты, определяющие, что Представление означает, что между компьютерами будет согласованность. Обратите внимание, что это не единственный способ представить числа с плавающей запятой. чисел, это просто стандартный способ IEEE. Вот что мы делаем: представление ------------------- | S | E | F | ------------------- S - один бит, представляющий знак числа E - 8-битное целое число со смещением, представляющее показатель степени F - целое число без знака представленное значение: S e (-1) х f х 2 куда e = E - смещение п f = F / 2 + 1 для чисел с одинарной точностью (акцент в этом классе) n = 23 bias = 127 Что все это значит? (Здесь все для Представление IEEE с плавающей запятой одинарной точности.) -> S, E, F представляют поля в представлении. Каждый это просто набор битов. -> S - это просто знаковый бит. 0 для положительного, 1 для отрицательного. -> E - поле экспоненты. Поле E является предвзятым представлением-127. Итак, истинная экспонента представлена (E - смещение). Основание для номер ВСЕГДА 2. Примечание. Компьютеры, которые не использовали это представление, например построенные до стандарта, не всегда использовали систему счисления 2. Пример: некоторые машины IBM имеют систему счисления 16.-> F - мантисса. Он находится в несколько измененном виде. Есть Для мантиссы доступно 23 бита. Получается, что если эт. пт. числа всегда хранятся в нормализованном виде, тогда ведущие бит (тот, что слева, или MSB) всегда равен 1. Итак, зачем хранить это вообще? Он возвращается в число (что дает 24 бита точности мантиссы) для любых вычислений, но у нас есть только хранить 23 бита. Этот MSB называется СКРЫТЫМ БИТОМ. Пример: поставить десятичное число 64.2 в сингл IEEE точное представление. первый шаг: получить двоичное представление для 64,2 для этого получите бинарных повторений. для вещей слева и справа от десятичной точки отдельно. 64 это 1000000 .2 можно получить, используя алгоритм: .2 x 2 = 0,4 0 (мсб) 0,4 х 2 = 0,8 0 0,8 х 2 = 1,6 1 0,6 х 2 = 1,2 1 .2 x 2 = 0,4 0, теперь весь этот паттерн (0011) повторяется. 0,4 х 2 = 0,8 0 0,8 х 2 = 1,6 1 0,6 х 2 = 1.2 1 поэтому двоичное представление для .2 будет .001100110011. . . Снова соединяем половинки: 64.2 - это 1000000.0011001100110011. . . второй шаг: нормализовать двоичное представление. (сделай так, чтобы это выглядело научная нотация) 6 1.000000 00110011.. . х 2 третий шаг: 6 - истинный показатель степени. Для стандартной формы необходимо: быть в предвзятой-127 форме. 6 + 127 ----- 133 (значение смещенной экспоненты) 133 в 8-битном представлении без знака - 1000 0101 это битовая комбинация, используемая для E в стандартной форме.четвертый шаг: сохраненная мантисса (F) - это материал справа от точки счисления в нормальном виде. Нам нужно 23 бита. 000000 00110011001100110 собрать все вместе (и включить правильный знаковый бит): S E F 0 10000101 00000000110011001100110 значения часто даются в шестнадцатеричном формате, поэтому здесь 0100 0010 1000 0000 0110 0110 0110 0110 0x 4 2 8 0 6 6 6 6 или 42806666h Некоторые дополнительные детали: -> Поскольку числа с плавающей запятой всегда хранятся в обычном форма, как мы представляем 0? (Что значит фл.пт. число 0x3f80 0000 представляют?) (Что означает номер 0x0080 0000?) Берем битовые комбинации 0x0000 0000 и 0x8000 0000 для представления значения 0. (Какие плоские числа из-за этого не могут быть представлены?) -> Другие особые значения: + бесконечность 0 11111111 00000 ... (0x7f80 0000) -infinity 1 11111111 00000 ... (0xff80 0000) NaN (не число)? 11111111 ????? ... (S равно 0 или 1, E = 0xff, а F - что угодно, кроме нулей)
ГЛАВА 2 — ПРЕДСТАВЛЕНИЕ ВНУТРЕННИХ ДАННЫХ
ГЛАВА 2 — ПРЕДСТАВЛЕНИЕ ВНУТРЕННИХ ДАННЫХ ГЛАВА 2 — ПРЕДСТАВЛЕНИЕ ВНУТРЕННИХ ДАННЫХВ этой главе обсуждается внутреннее представление данных.Коллекции битов расположены в стандартных форматах для представления символов и чисел. Доступ к памяти в машинно-определяемых единицах фиксированной длины, называемых словами.
ОПИСАНИЕ ГЛАВЫ
2.0 Введение
2.1 Биты и коды символов
2.1.1 Байты и символы
2.1.2 BCD
2.1.3 EBCDIC
2.1.4 ASCII
2.1.5 Другие коды
2.2 Системы счисления
2.2.1 Позиционная система обозначений и основание 10 — десятичная дробь
2.2.2 База 2 — двоичная
2.2.2.1 Целые двоичные числа
2.2.2.2 Числовые данные — упакованные и распакованные десятичные числа
2.2.2.3 Двоичные вещественные числа
2.2.3 Производные по основанию 2 — восьмеричные и шестнадцатеричные
2.2.4 Целочисленные преобразования
2.2.4.1 Преобразование двоичного числа в десятичное
2.2.4.2 Преобразование десятичного числа в двоичное
2.2.4.3 Преобразование двоичного числа в шестнадцатеричное
2.2.4.4 Преобразование из шестнадцатеричного в двоичное
2.2.5 Сложение двоичных файлов
2.2.6 Отрицательные двоичные целые числа
2.2.6.1 Знак — условная величина
2.2.6.2 Соглашение о смещении или превышении
2.2.6.3 Дополнения
2.2.7 Двоичное вычитание
2.2.8 Двоичное умножение
2.2.9 Действительные числа с плавающей запятой
2.2.9.1 Соглашение с плавающей запятой для мэйнфреймов IBM
2.2.9.2 Стандарт IEEE с плавающей запятой
2.2.10 Дальность и точность
2.2.10.1 Диапазон и точность целых чисел
2.2.10.2 Диапазон и точность действительных чисел
2.3 Слова
2,4 Четность
Цели
По завершении этой главы вы сможете:
1.Обсудите методы хранения символьных и числовых данных в компьютер и его периферийные устройства. 2. Описывать и выполнять бинарные арифметические операции. 3. Преобразование оснований чисел 2, 8, 10, 16.4. Опишите внутреннее двоичное представление действительных чисел несколькими разные условности.
5. Обсудить организацию автобуса.
6. Обсудите концепции байтов и слов.
7. Обсудите числовую точность в представлении и суммировании.
По мере продвижения вверх по эволюционной цепочке мы обнаруживаем, что более продвинутые
видов, тем сложнее их средства передачи и хранения данных.
Бобр сигнализирует об опасности, хлопая хвостом по воде. Многие ученые
думаю, у морских свиней сложная языковая структура. Наш вид развился
самые сложные системы хранения данных. Иероглифы древних
Египтяне были загадкой, пока ключ не был обнаружен в Розеттском камне.В китайском и японском языках говорят на столь разных языках, как
Французский и испанский, но используют в своих
письменный язык. Семитские народы Ближнего Востока разработали фонетический
алфавит, который обеспечил гораздо большую универсальность, чем письменный
языков. Существуют также различные способы представления
числовая информация, например римские цифры или знакомое десятичное число
Мы привыкли к индоевропейскому фонетическому алфавиту.Это интересно
что все языки по сути представляют одни и те же идеи и данные.
Благодаря электронно-цифровому компьютеру мы сейчас находимся в начале
того, что было названо информационным веком. Это требует некоторого способа
электронного представления широкого спектра различных способов хранения
данные. Уникальные строки двоичных единиц и нулей могут представлять практически все
возможные символы. Часто задают вопрос: «Зачем использовать двоичные цифры вместо более естественных десятичных цифр 0, 1, 2, 3, 4, 5, 6, 7, 8,
9? «Несмотря на то, что вначале были предприняты попытки создания компьютеров с десятичным числом,
например, IBM 650, было обнаружено, что из-за простоты представления
двоичная система была намного лучше.Относительно легко отличить
между положительным или отрицательным напряжением или между магнитным полюсом, облицованным
вверх с севера на юг или с юга на север, или наличие дыры или отсутствие дыры в
перфокарта. Также легко изменить состояние очень быстро, если есть
есть только две возможности. Это намного сложнее, если не технически
невозможно, достичь такой же скорости и точности с другими системами счисления.
Однако может быть что-то более фундаментальное и потенциально захватывающее.
об использовании двоичной системы для представления информации.В нашем поиске
внеземную жизнь мы передаем двоичные образцы, представляющие
числа. Космический зонд «Вояджер» также имеет двоичные сообщения для потенциальных
разумные формы жизни, которые получают его сообщения. Возможно, если мы когда-нибудь сделаем
контакт с другими формами жизни, нашим первым средством общения будет
через какие-то двоичные коды.
В современном сложном мире компьютеров и передачи данных это
полезно иметь представление об основных строительных блоках
информационный взрыв.В главе 1 мы кратко обсудили, как струны
бит может представлять адреса или места в памяти, а также инструкции
для исполнения на компьютере. Однако картина еще не полная.
Аналогичная схема кодирования используется для представления как числовых, так и символьных
данные. В этой главе мы рассмотрим несколько стандартных соглашений.
которые были разработаны для представления символьных данных . Мы также
обсудить представление числовых данных и то, как им можно управлять.Последняя тема будет посвящена вопросу обеспечения целостности данных.
В раннем символьном коде использовалось шесть бит или двоичных цифр для каждого
условное обозначение. Этого было достаточно для цифр (0, 1, 2, 3, 4, 5, 6, 7, 8 9,)
заглавные буквы (A, B, C, …, X, Y, Z) и несколько специальных символов. Как вычисления
и обработка данных стала более сложной, необходимо было увеличить
количество бит до семи или восьми для представления как верхнего, так и нижнего регистра
буквы и другие специальные символы.Аналогичные проблемы возникают с числовыми
данные. Чем больше битов используется, тем точнее и шире диапазон
числа, которые могут быть представлены. Это одно из важных отличий
между сегодняшними персональными компьютерами и очень большими суперкомпьютерами. В
более крупные системы могут более легко представлять и манипулировать гораздо большими числами
намного точнее. В этой главе мы сначала рассмотрим персонажа
коды, которые использовались для представления данных. Далее мы исследуем, как
числовые данные хранятся и обрабатываются в современных цифровых компьютерах.Глава завершится кратким обсуждением того, как целостность данных
можно улучшить в двоичной системе, включив некоторую дополнительную информацию.
2.1 Биты и символьные коды
2.1.1 Байты и символы
Для представления данных в компьютере были разработаны различные схемы.
и удобно передавать его между системами. Есть необходимость представить
как числовая, так и буквенная информация.Также необходимо представить
специальные символы (например,? / <> {} {} и т. д.) и управляющая информация (например,
возврат (BS), удаление (DEL), новая строка (NL) и т. д.). Три кода, которые мы
изучить ниже имеют возможность представлять все типы символьных данных.
Обычно мы называем эти данные буквенно-цифровыми данными . В большинстве вычислений
систем, оборудование было разработано для удобного хранения и манипулирования
один символ данных. Эту единицу хранения обычно называют одной байт .
2.1.2 Символы BCD
Первая схема кодирования, получившая широкое распространение, получила название BCD .
или Десятичное двоичное кодирование . Это было доминирующее представление
на вычислительных системах второго поколения. Шесть бит используются для представления
разные персонажи. Как показано на рисунке 2.1, четыре крайних правых бита
(младшие биты) называются числовыми битами, а два левых бита (старшие
биты порядка) называются битами зоны.Биты зоны обозначены буквами A и
B. В Разделе 2.1.3.1 мы увидим, как числовым битам присваивается их
связанное десятичное значение. Пояснение к контрольному биту, иногда называемому четностью.
в разделе 2.4. Когда биты зоны равны 00, числовые биты интерпретируются.
в виде цифровых цифр от 0 до 9. В Разделе 2.1.3.1 мы увидим, что
код является прямым использованием двоичной системы счисления. Когда бит зоны
любые из трех других конфигураций, 01, 10, 11, интерпретация
тогда буква или специальный символ.
На рис. 2.2 показан весь набор символов и их представление.
С шестибитным ограничением возможны только 64 различных символа.
По мере того как вычислительные системы становились больше и мощнее, возникла необходимость
для большего количества символов, включая строчные буквы и специальные символы.
Это привело к разработке следующих двух кодов, EBCDIC и ASCII.
2.1.3 Символы EBCDIC
Расширенный двоично-десятичный код обмена или EBCDIC (произносится как Eb-see-dic) использует восемь бит для представления каждого символа, таким образом
расширение возможных конфигураций символов до 256.Дополнительные персонажи
используются для строчных букв, непечатаемые символы используются
для отправки управляющей информации и других специальных печатных символов. Там
все еще неиспользованные коды для будущего роста. Он также использует четыре числовых бита
но добавил два бита зоны. В попытке сохранить совместимость с
более старый код BCD, значение числовых битов сохранялось для
цифры и буквы алфавита.
Коды символов EBCDIC показаны на рисунке 2.3. Несколько объектов недвижимости
интересны с точки зрения обработки данных. Обратите внимание, что единственный
разница между прописными и строчными буквами — вторая зона
бит, поэтому перевод из верхнего в нижний регистр или наоборот может быть выполнен
просто перевернув один бит. Также обратите внимание, что можно использовать биты зоны
для проверки специальных символов, букв или цифр. Это свойство важно
при тестировании на достоверность входных данных. Было бы относительно легко
чтобы убедиться, что пользователь ввел процент как 0.05 или 5% в зависимости от того, что
компьютер ожидал.
Еще одно свойство также важно. Если восемь бит используются для
представляют буквы интерпретируются как двоичные числа, тогда буквы
следуйте последовательности, где «А» имеет наименьшее значение, а «Z» — наибольшее.
ценить. Это свойство критично при сортировке данных по алфавиту. В
компьютер может интерпретировать битовые шаблоны как двоичные целые числа, выполнять
сортировать, а затем переинтерпретировать битовые шаблоны как символы.Используемый порядок
в расположении символов называется упорядочивающей последовательностью и может
различаются для разных кодов символов.
2.1.4 ASCII
ASCII или Американский стандартный код обмена информацией (произносится как Ass-kee) был разработан в сотрудничестве с компьютерными
и индустрии связи в попытке упростить и стандартизировать межмашинный
и межсистемная связь.Набор состоит из букв, цифр,
специальные символы, управляющие символы и графические символы. Это показано
на рисунке 2.4. ASCII имеет многие свойства обсуждаемого кода EBCDIC.
выше, но есть несколько важных отличий. ASCII использует только семь
биты. Как мы увидим в разделе 5, когда мы добавляем один бит, чтобы гарантировать, что данные
целостность, все символы ASCII удобно помещаются в один байт. Этот
факт имеет значительные преимущества для общения. Еще одно важное отличие
это последовательность символов.Обратите внимание, что в числовом
значения кодов. Это позволяет легко проверить достоверность данных. ASCII
стал стандартом де-факто для микро- и мини-вычислительных систем и
стандарт связи. EBCDIC по-прежнему широко используется на
большие совместимые вычислительные системы IBM и IBM. Большинство как крупных
а небольшие системы предоставляют служебные программы перевода для преобразования из
одна система в другую.
2.1.5 Другие коды
Все три кода, которые мы обсуждали до сих пор, имеют фиксированное количество
биты. Также возможно иметь коды переменной длины. Преимущество
кода переменной длины позволяет значительно сэкономить место. Это
очевидно, если бы мы назначили
А 0
В 1
С 00
D 01
E 10
Ж 11
G 000
H 001
…
Поскольку существует переменная длина, необходимо иметь некоторые
техника, чтобы указать, когда один персонаж останавливается, а другой начинается. Вдобавок
экономия места может быть реализована путем присвоения кратчайших кодов
наиболее часто встречающиеся символы. Один из распространенных методов называется Hoffman.
Кодировка . Должно быть очевидно, что есть компромиссы при использовании переменной
коды длины вместо методов фиксированной длины. Экономия места
происходит за счет увеличения времени обработки для декодирования переменной длины
символы.
2.2 Системы счисления
В главе 1 мы упоминали, как строки битов могут быть интерпретированы как
адреса и инструкции. В предыдущем разделе мы видели, как строки
битов можно интерпретировать как символы. В этом разделе мы продолжим
обсуждение и показать, как может храниться числовая информация. По мере развития
Из материала этого раздела станет ясно, что представление персонажа
цифр принципиально отличается от числового значения.Данная строка
бит может иметь различное значение в зависимости от контекста его использования.
Это была Ада, графиня Лавлейс, которая первой предложила использовать двоичный
система счисления для представления данных внутри компьютера. Джон фон Нейман
приписывают повторное внедрение идеи почти сто лет спустя в
ранние вычислительные машины. Чтобы понять числовые схемы или
основы, важные в вычислениях, мы сначала рассмотрим некоторые фундаментальные концепции
используя более привычную систему счисления 10 или десятичную систему.
2.2.1 Позиционное обозначение и Основание 10 — Десятичное число
Конечно, наиболее знакомая нам система счисления — десятичная.
или основание 10. Оно называется основанием 10, потому что каждая позиция в числе имеет
значение в десять раз больше, чем позиция справа, и есть десять
разные цифры 0,1,2,3,4,5,6,7,8,9. Например, в числе 354 знак
4 представляет 4 единицы, 5 представляет 5 десятков и 3 представляет 3
«сотни».Мы видим, что каждая цифра имеет два значения; один свой
числовое значение, а второе — его позицию. Как мы считаем, когда мы достигнем
9, мы знаем, что следующее число начинается с 1 в следующем столбце. Мы говорим мы
перевели в следующую позицию. Если мы имеем дело с действительными числами
с десятичной точкой применяется тот же принцип, за исключением того, что теперь вы двигаетесь
справа от десятичной запятой вы делите на десять для каждого последующего
позиция.
Чтобы закрепить эти идеи, давайте рассмотрим пример: число 354.286
можно представить как
3×100 + 5×10 + 4 + 2/10 + 8/100 +6/1000
Используя экспоненциальную запись, это также можно представить как
3×10 2 + 5×10 1 + 4×10 0 + 2×10 -1 + 8×10 -2 + 6×10 -3 .
Как мы увидим, использование этой последней формы поможет нам понять другие
числовые базы.
2.2.2 Базовый 2 — Двоичный
Современные вычислительные системы, как мы уже обсуждали, не используют десятичную дробь.
а скорее двоичная система счисления. Единственные цифры в этой системе:
0 и 1. Эти две цифры часто называют бит для B inary.
копать ЕГО . Используя концепции, рассмотренные для основания десять, мы также можем считать
в двоичном формате: ноль — 0, единица — 1; но теперь, когда мы достигаем двух, так как мы только
есть две цифры, мы переносим на следующую позицию и получаем 10.Это не
число десять в десятичном, а число два в двоичном. Очень часто, чтобы
Во избежание двусмысленности используется нижний индекс 10 2 . На рисунке 2.5 показано
как считать в нескольких разных системах счисления.
2.2.2.1 Целые двоичные числа
Чтобы лучше понять эти концепции, рассмотрите следующий номер в
основание два:
101101 2
Так же, как и в случае с основанием десять, мы перемещаем каждую позицию на одну позицию влево.
цифра имеет значение, увеличенное еще на одно умножение основания:
1×2 5 + 0x2 4 + 1×2 3 + 1×2 2 + 0x2 1 1×2 0
Это также можно записать как
1×32 + 0x16 + 1×8 + 1×4 + 0x2 + 1
Таким образом, мы видим, что
1011012 2 = 4510 10 .
Важным свойством двоичной системы является ее простота: потому что
у нас есть только цифры 0 и 1, позиция либо дает степень
два или ничего, так как оно умножается на 1 или ноль. Это свойство упрощает
арифметические электронные схемы и тем самым делают их более надежными.
2.2.2.2 Числовые данные — Упакованные и распакованные десятичные числа
Во многих приложениях точность доступна при использовании стержней фиксированной длины
бит для числовых данных недостаточно.(Диапазон и точность
двоичные числа обсуждаются в разделе 2.2.10.1.) Это часто случается, когда
мы рассматриваем государственный или крупный корпоративный бюджет. Альтернативный
Схема может использоваться для хранения чисел с произвольной степенью точности.
Используемые форматы называются упакованными и распакованными десятичными .
Часто при считывании числовых данных в компьютер в распаковывается десятичная форма . Это простой вариант на EBCDIC.На рисунке 2.3 мы наблюдаем что представление EBCDIC цифр от 0 до 9 состоит из биты 1111, за которыми следует двоичное значение этой цифры. Например, «1» — 11110001, а 9 — 11111001. Четыре левых бита называются зоной . часть , а четыре правых бита — это числовая часть . Этот показано на рисунке 2.6. Все цифры номера хранятся в этом способом, кроме самой правой цифры. Для самой правой цифры зона Часть используется для представления алгебраического знака числа.Положительный знак — 1100 (C 16 ), отрицательный знак — 1101 (D 16 ). Таким образом, число
+134 становится 11110001 11110101 11000100
1 3 + 4
и
-97 становится 11111001 11010111.
9–7
Из приведенного выше обсуждения должно быть очевидно, что информация
в части зоны не требуется, за исключением крайней правой цифры.
Это приводит к упакованному десятичному формату , где все биты зоны удаляются, за исключением самой правой цифры.В этом случае зона или знак находится в крайнем правом положении. Если нет полного номера байтов, затем добавляется начальный ноль (см. рисунок 2.8). Чтобы прояснить это обсуждение, рассмотрим упакованную десятичную форму чисел, использованных в предыдущем примере.
+134 становится 00010101 01001100
1 3 4 +
и
-97 становится 00001001 01111101
0 9 7 —
Многие компьютерные системы имеют оборудование, предназначенное для работы с числами.
в упакованном десятичном формате напрямую.Потеря скорости уравновешивается увеличением
точность.
2.2.2.3 Двоичные вещественные числа
Действительное число состоит как из целой, так и из дробной части. Представлять
действительные числа в двоичном формате, мы вводим понятие, аналогичное десятичной запятой,
но теперь мы называем это двоичной точкой . Номер
101,012 2
интерпретируется как
1×2 2 + 0x2 1 + 1×2 0 + 0x2 -1 + 1×2 -2
или
4 + 0 + 1 + 0 + 1/4 = 5.2510
Вычислительные системы могут использовать различные соглашения для хранения отрицательных чисел
или действительные числа, но концепции все похожи.
Возможно, вы заметили, что у этого простого подхода есть некоторые проблемы.
что нет возможности представить все возможные десятичные (дробные) числа
используя эту систему. Как бы вы представили значение 0,66; здесь нет
комбинация отрицательных степеней двойки, которая может быть использована для представления этого
ценить.Лучшее, что мы можем сделать, — это приблизительно рассчитать это число. Мы
можем продолжать добавлять все меньшие степени двойки, пока не подойдем достаточно близко.
Нам нужно будет определиться с некоторым фактором терпимости, и когда мы войдем в
это значение мы остановим.
В общих чертах мы можем представить значение как
d n 2 n + d n-1 2 n-1 + … d 0 2 0 + c 1 2 -1 + c 2 2 -2 +… + c м-1 2 м-1 <= X
где X — десятичное число, которое должно быть представлено.
Нам придется выбрать некоторый допуск, чтобы удовлетворить это неравенство. Ты
наверняка заметили при использовании вещественных чисел на языке высокого уровня
что вы никогда не получите нулевое (0) значение при работе с этими числами.
Проблема возникает из-за толерантности. Просто увеличив точность (
количество используемых цифр) не решит проблему.Больше точности будет
просто переместите проблему в конец длинной строки нулей с несколькими 1 битами
близко к концу. Большинство систем выбирают фиксированное количество бит для представления
количество. Это установлено на оборудовании и не может быть изменено. Собственно, несколько
параметры обычно доступны с разной степенью точности, называемой
стандартная точность, двойная точность и иногда повышенная точность.
Более подробно действительные и отрицательные числа рассмотрим в
Разделы 2.2.6 и 2.2.9.
2.2.3 Производные по основанию 2 — Восьмеричное и Шестнадцатеричное
Две другие системы счисления важны из-за их связи с
основание 2. Это восьмеричная система с основанием восемь или , восьмеричная система счисления и шестнадцатая система счисления, или шестнадцатеричная система счисления .
(шестнадцатеричный) . Подсчет в этих базах показан на рисунке 2.5. В шестнадцатеричном формате
у нас 16 цифр, поэтому мы используем десять обычных цифр и первые 6 букв
алфавита.
Важность восьмеричных и шестнадцатеричных чисел основана на том свойстве, что они могут
служат удобными сокращениями для двоичных чисел. Из рисунка 2.5,
мы можем видеть, что каждая восьмеричная цифра может представлять три двоичных цифры в
уникальным образом, и каждая шестнадцатеричная цифра может представлять четыре двоичных цифры.
Ранние компьютеры, которые использовали 6-битный BCD-код, могли сокращать каждый символ.
используя две восьмеричные цифры. В этих машинах 6 бит называлось байтом .
Более современные машины почти исключительно ориентированы на 8 бит, чтобы
обрабатывать EBCDIC и ASCII. Каждые 8 бит можно сократить, используя два шестнадцатеричных
цифры. В настоящее время принято считать, что термин байт равен 8 битам. С
один байт можно использовать для хранения одного символа, иногда объем памяти
задано как количество символов. В этом случае символ и байт
синоним. Как показано на рисунке 2.5, вместо использования 8 бит мы можем использовать
всего две шестнадцатеричные цифры.
2.2.4 Целочисленные преобразования
С четырьмя различными системами счисления, которые мы ввели,
большое количество конверсий, которые мы могли бы учесть; однако мы ограничим
наше внимание только к целым числам и к наиболее важным системам:
двоичное в десятичное
десятичное в двоичное
двоичное в шестнадцатеричное
из шестнадцатеричного в двоичное
Если необходимо преобразовать десятичное в шестнадцатеричное, это
всегда можно пройти через двоичный файл, например
основание 10 <--> основание 2 <--> основание 16
Иногда при возникновении системных проблем необходимо проверить
содержимое памяти.Утилита обычно поставляется с
операционная система, которая будет выполнять задачу «сброса» содержимого
памяти на принтер. Это называется дамп памяти или или .
Дамп . Вывод обычно в шестнадцатеричном формате для экономии места на
распечатанная страница. Типичный пример показан на рисунке 2.7. Чтобы интерпретировать это
вывод, часто бывает необходимо преобразовать шестнадцатеричное в двоичное или десятичное,
или выполните обратную операцию. Эти преобразования несложны,
но, как и в случае с большинством математических операций, их выполнение требует практики
быстро.Большинство профессионалов в области информации и обработки данных
редко приходится прибегать к этим методам. Следовательно, для тех немногих
случаи, когда это необходимо, общее знакомство с техникой
адекватный.
2.2.4.1 Преобразование двоичного числа в десятичное
Чтобы преобразовать двоичное в десятичное, вспомните, что каждая позиция представляет
определенная степень двойки. Рассмотрим следующее число с основанием 2:
10011011
это можно представить как
1×2 7 + 0x2 6 + 0x2 5 + 1×2 4 + 1×2 3 + 0x2 2 + 1×2 1 + 1×2 0
Используя степени двойки из рисунка 2.8 у нас есть
128 + 16 + 8 + 2 + 1 = 155
2.2.4.2 Преобразование десятичной системы в двоичную
Для преобразования десятичного числа в двоичное используется последовательное вычитание степеней
из двух. Сначала найдите наибольшую степень двойки, которую можно вычесть из
десятичное число. Это становится первой двоичной цифрой слева или
бит старшего разряда. В качестве примера мы будем использовать то же число, что и раньше, 155.Из рисунка 2.8 видно, что 128 — это наибольшая степень двойки, которая может быть
вычитается из 155, остается 27; следовательно, у нас есть
155 — 128 = 27
или
1×2 7 + 27
Теперь мы повторяем процедуру с 27. Наибольшая степень двойки, которая может
из 27 вычитается 16 (2 4 ), оставляя остаток 11.
1×2 7 + 1×2 4 + 11
Снова повторяя 11
1×2 7 + 1×2 4 + 1×2 3 + 3
И, наконец, последние два взноса
1×2 7 + 1×2 4 + 1×2 3 + 1×2 1 + 1 x20
После того, как мы заполнили полномочия, которые не вносят вклад, у нас есть
1×2 7 + 0x2 6 + 0x2 5 + 1×2 4 + 1×2 3 + 0x2 2 + 1×2 1 + 1×2 0
Оставив силы двойки имеем
10011011
В табличной форме это можно резюмировать как
числовой вклад мощности
из
два
155
-128 2 7 1
27
2 6 0
2 5 0
-16 2 4 1
11
— 8 2 3 1
3
2 2 0
— 2 2 1 1
1 2 0 1
Теперь двоичное число можно построить, прочитав третий столбец.
снизу вверх, что дает 10011011.
2.2.4.3 Преобразование двоичного числа в шестнадцатеричное
Преобразование из двоичного в шестнадцатеричное довольно просто. Сначала проверьте
посмотрите, делится ли количество бит на четыре. Если его нет, добавьте необходимое
количество нулей впереди. Начальные нули не изменяют значение. Например
0101011111
становится
00101011111
Теперь разделите двоичное число на группы по четыре бита.
0010 1010 1111
Теперь мы можем использовать рисунок 2.8, чтобы завершить процесс, заменив
каждая группа из четырех двоичных цифр одна шестнадцатеричная цифра. Результат
2 А Ф
2.2.4.4 Преобразование из шестнадцатеричного в двоичное
Преобразование из шестнадцатеричного в двоичное так же просто. Рассмотрим
шестнадцатеричное число
E19C
Используя рисунок 2.8 это становится
E 1 9 C = 1110 0001 1001 1100
или
1100000110011100
2.2.5 Сложение двоичных файлов
Большинство арифметико-логических устройств поддерживают всю стандартную целочисленную арифметику.
операции непосредственно в аппаратном обеспечении. Более мощные машины также будут включать
аппаратные операции с плавающей запятой или вещественными числами.Числа с плавающей запятой
будет обсуждаться в следующем разделе.
Стандартные математические функции включают сложение, вычитание, умножение
и деление. Вместо полного лечения этих операций мы
сосредоточимся на двух наиболее важных операциях, а именно на добавлении
и вычитание с кратким обсуждением умножения. При анализе
детали дампа памяти, сложение и вычитание — единственное, что необходимо
операции.
Если вы внимательно проанализируете, как вы выполняете сложение в десятичной дроби
система счисления, каждый раз, когда вы добавляете столбец из двух чисел, с которыми работаете
три входа; первая цифра, вторая цифра и перенос из
предыдущий столбец. Например
76
+59
135
Когда вы складываете 5 и 7, нужно перенести 1 из предыдущего
столбец.Чтобы найти результат, все мы запомнили таблицу 10 на 10, которая называется
таблица сложения, потому что в десятичной системе каждая цифра может иметь одну из десяти различных
значения (см. рисунок 2.9). Результат фактически состоит из двух значений; а
3 из сложения и 1 для переноса в следующий столбец.
Аналогичные операции выполняются в двоичном формате, за исключением того, что каждый вход может иметь
только два разных значения, 0 или 1 (см. рисунок 2.10). Если у нас есть три входа,
есть 8 возможных комбинаций.У нас также есть два выхода; Значение
сложения для этого конкретного столбца и переносимого значения в
следующий столбец. Рисунок 2.11 представляет собой табличное представление различных возможностей.
Возможно, это звучит более запутанно, чем есть на самом деле. Мы рассмотрим
несколько примеров для пояснения операций. Сначала рассмотрим обсуждаемую проблему
выше:
76
+59
135
В двоичном формате это будет
1001100
+0111011
Входные данные из первого столбца:
бит 1 = 0
бит 2 = 1
бит переноса = 0 (перенос в первом столбце невозможен)
Следовательно, из рисунка 2.9 выходы
бит результата = 1
бит выполнения = 0
Каждый столбец выполняется таким же образом с битом переноса из предыдущего столбец становится переносимым битом. Конечный результат
1001100
+0111011
10000111
, что равно 135 в десятичной системе.
2.2.6 Отрицательные двоичные целые числа
В разделе 2.2.2 мы обсуждали, как хранятся положительные целые числа.
в двоичном формате, но отрицательные числа не упоминаются. Несколько разных
техники возможны. Каждый из них используется в разных ситуациях в наши дни.
вычислительные системы.
2.2.6.1 Знак-величина Условное обозначение
Пожалуй, самый очевидный метод хранения отрицательных чисел — это
зарезервируйте первый бит как знаковый.«0» будет положительным (+), а
«1» будет отрицательным (-). Если бы мы рассматривали 8-битные числа, то
число +21 будет
00010101
, а число -21 будет
10010101
Поскольку ведущий бит используется для представления алгебраического знака, наибольший
число в абсолютном значении имеет семь бит или
1111111
В десятичном виде это 127.Обратите внимание, что есть два значения для нуля
10000000 и 00000000
Чаще всего соглашение о величине знака используется для хранения
мантисса для чисел с плавающей запятой, которые мы обсудим в разделе 2.2.9.
2.2.6.2 Соглашение о смещении или превышении
Смещение или избыточное обозначение использует простое преобразование в
преобразовать диапазон положительных и отрицательных чисел во все положительные значения.Тогда аппаратная логика не должна учитывать отрицательные числа. В
в соответствии с этим соглашением ко всем числам в диапазоне сдвига добавляется фиксированная сумма.
их на действительной оси, так что они хранятся как положительные целые числа. Этот
соглашение требует, чтобы диапазон целых чисел считался симметричным относительно
нуль. Например, мы могли бы рассматривать числа от -128 до +127, где
ноль считается положительным числом. Их можно записать в двоичном формате
в качестве
-128 = -10000000 и +127 = +01111111
Если мы добавим 128 или 10000000 ко всем числам, диапазон станет
0 = 00000000 до +255 = +11111111
Смещение всегда является степенью двойки и соответствует размеру
целые числа в конкретной конфигурации оборудования.Соглашение о предвзятости
обычно используется для представления характеристики или экспоненты с плавающей запятой
reals, который обсуждается в разделе 2.2.9.
2.2.6.3 Дополнения
Последнее условное обозначение, которое мы рассмотрим, с дополнением до двух , вероятно,
чаще всего используется для представления положительных и отрицательных целых чисел. Скорее
чем остановиться на математических основах; мы просто посмотрим, как
для формирования числа с дополнением до двух и некоторых важных свойств.
Этот метод работает, потому что мы имеем дело с фиксированным количеством бит
для представления числа. Если у нас есть положительное целое число в двоичном формате, чтобы представить
его отрицательный аналог в дополнении до двух, мы меняем все биты (переверните
биты) и добавьте 1. Например, десятичное число 117 может быть представлено
в 8-битном шаблоне как
01101010
Чтобы найти его дополнение до двух, мы сначала переворачиваем все биты
10010101
и добавьте один
10010101 + 1 = 10010110
Теперь это интерпретируется как -117.
Способ определения, есть ли у вас отрицательное число в дополнении до двух
основан на значении первого бита. Если это 0, то значение
число положительное и задается двоичным значением. Если первый бит равен 1,
число отрицательное. Чтобы найти его абсолютное значение, вы берете два дополнения
и используйте его двоичное значение.
В качестве другого примера рассмотрим число
11001011
Поскольку первый бит равен 1, у нас есть отрицательное число в дополнении до двух.Чтобы найти его алгебраическое значение, мы берем два дополнительных флип-бита
00110100
добавить один
00110101
Затем, используя изученные нами методы, мы находим значение
-53
Внимательное рассмотрение предыдущих примеров приводит к выводу
что наибольшее положительное число, которое может быть сохранено в восьми битах, равно
01111111
, поскольку, если бы первый бит был 1, мы интерпретировали бы его как отрицательное число
в двух дополнениях.Это число
2 7 -1 или 127
, а наибольшее отрицательное число
-2 7 = 10000000 или -128.
Таким образом, используя дополнение до двух, диапазон целых чисел, который может уместиться в
один байт — это от -128 до +127 или ровно 256 различных значений. Это соответствует
с утверждением, сделанным в разделе 2.1.3 при обсуждении EBCDIC, где
мы заявили, что существует 256 различных символов, которые могут
быть представлен в восьмибитном коде.Верно также и то, что дополнение
дополнения — исходный номер.
2.2.7 Двоичное вычитание
Вычитание аналогично сложению. Мы используем свойство, которое
вычитание числа аналогично сложению его дополнения до двух.
Это одно из важнейших свойств двух дополнений. Пример
должно быть достаточно, чтобы объяснить принцип.Предположим, у нас есть восемь
битовые числа. Напомним, что диапазон составляет от -128 до +127, а число —
отрицательный, если первый бит равен 1. Использование тех же чисел, что и сложение
пример у нас есть
7 76
-59
+17
В двоичном формате это
01001100
-00111011
, где мы добавили отведение 0, чтобы завершить 8 бит.
Формирование двойного дополнения
00111011
дает
11000101
Использование этого в задаче приводит к новой постановке проблемы
01001100
+11000101
Теперь, используя рисунок 2.8 и игнорируя последний перенос, получаем
01001100
+11000101
00010001
Поскольку ведущий бит равен нулю, мы интерпретируем ответ как положительное число
значение которого +17.
В качестве последнего примера рассмотрим, что происходит, когда ответ
отрицательный. Переворачивая числа из предыдущего примера, мы имеем
59
-76
-17
В двоичном формате это
00111011
-01001100
Формирование двойного дополнения
01001100
дает
00111011
+10110100
Выполняя сложение, имеем
00111011
+10110100
11101111
Теперь, поскольку ведущий бит равен 1, ответ интерпретируется как отрицательный.
число в форме дополнения до двух.Чтобы найти значение, мы берем дополнение до двух
и поставьте знак минус
-00010001 или -17
2.2.8 Двоичное умножение
Кратко рассмотрим целочисленное двоичное умножение. Умножение
двух чисел в двоичной системе особенно просто. Дивизия
более сложные, и мы отложим это до более подробных и сложных текстов.
Двоичное умножение аналогично более привычному десятичному умножению.Рассмотрим умножение 13 x 19.
19 строка 1
x 13 строка 2
57 строка 3
19 строка 4
246 строка 5
Для цифры в строке 2 мы умножаем число в строке 1 и вводим
приведенный ниже результат сдвинут на соответствующее количество позиций. Строка 3
результат 3 x 19, а строка 4 — результат 1 x 19 со сдвигом
1 позиция.Линия 5 представляет собой сумму отдельных умножений.
Если бы в строке 2 было больше цифр, сумма была бы больше, чем в строках.
В двоичном формате мы выполняем те же функции, но поскольку множитель может
может быть только 0 или 1, мы просто добавляем 0 или добавляем множимое, сдвинутое на
соответствующее количество позиций. (Напомним, умножение на единицу — это
операция тождества для умножения.) Единственная разница в том, что мы
сложите после каждого умножения цифр, образуя серию частичных сумм.
Чтобы прояснить процедуру, мы рассмотрим ту же проблему в двоичном формате.
частичное умножение
битовая сумма
10011 строка 1
x 01101 строка 2
10001 1 сумма 1 строка 3
0 0 строка 4
10011 сумма 2 строка 5
10011 1 строка 6
1011111 сумма 3 строка 7
10011 1 строка 8
11110111 сумма 4 строка 9
0 0 строка 10
11110111 сумма 5 строка 11
Преобразование 11110111 обратно в десятичное дает тот же ответ — 247.
Чтобы лучше понять этот процесс, мы обсудим каждую строку отдельно;
строка 1 множимое
строка 2 множитель
строка 3 умножение на 2 0 бит со значением 1, дающим первая частичная сумма
строка 4 умножение на 2 1 бит со значением 0, дающим ноль результат
строка 5-ти секундная частичная сумма (строка 3 + строка 4)
строка 6 умножение на 2 2 бит со значением 1
строка 7 третья частичная сумма (строка 5 + строка 6)
строка 8 умножение на 2 3 бит со значением 1
строка 9 четвертая частичная сумма (строка 7 + строка 8)
строка 10 умножение на 2 4 бит со значением 0, дающим нулевой результат
строка 11 частичная пятая сумма (строка 9 + строка 10).Это окончательный ответ
Более внимательное рассмотрение процесса двоичного умножения показывает, что
строки 1, 6 и 8 представляют собой один и тот же битовый шаблон, который является просто умножаемым
сдвинул соответствующее количество позиций влево. Строки 4 и 10
являются заполнителями для нулевых битов умножителя.
Весь процесс двоичного умножения — это просто последовательность (1) сдвига
(2) логический тест, чтобы узнать, равен ли бит умножителя 0 или 1, и (3) добавить к
частичная сумма, если бит равен 1.Как и следовало ожидать, эту логику легко
реализовать аппаратно.
2.2.9 Действительные числа с плавающей запятой
В разделе 2.2.2.2 мы кратко обсудили представление чисел
в котором была дробная часть, например 19,75, и как знакомая десятичная точка
имел аналогичный аналог в двоичной системе, называемый двоичной точкой .
Фактически мы могли бы представить
19.75
как
10011.11
в двоичной системе счисления. Цифры справа от двоичной точки представляют
2 -1 = 1/2 = 0,5 и 2 -2 = 1/4 = 0,25
соответственно. Эти числа иногда называют действительными числами.
Целые числа — это особый случай вещественных чисел без дробной части.В
во многих приложениях важно уметь представлять действительные числа
в компьютере. Возможно множество различных схем, но практически все
используйте концепцию «перемещения» двоичной точки в определенную позицию.
Проще всего понять эту концепцию на примере. Рассмотрим числа
+ 345,75 и — 0,03125
Эти два числа могут быть записаны в эквивалентной форме с использованием научных
обозначение как
+ 0.34575 x 10 +3 и — 0,31250 x 10 -1
, где мы выбрали первую ненулевую цифру справа от
десятичная точка. Другая форма могла быть
+ 3,4575 x 10 +2 — 3,1250 x 10 -2
, где мы выбрали первую ненулевую цифру слева от
десятичная точка. Эти два соглашения являются двумя примерами нормализации »
где мы зафиксировали представление мантиссы и поплыли
десятичная точка.Цифры
34575 и 31250
известны как мантисса или дробная часть и степени
из десяти, в первом случае,
+3 и -1
известны как характеристики или экспонент . Это
Важно отметить, что есть четыре отдельных элемента информации
в каждом номере;
1.знак мантиссы
2. Цифры, составляющие мантиссу
3. Признак характеристики
4. Цифры, составляющие характеристику.
Следует сделать несколько замечаний. Во всех системах фиксированный номер
битов используются для представления действительного числа. Чем больше битов используется в
мантисса, тем точнее может быть представлено число. С другой
стороны, чем больше битов используется для экспоненты или характеристики, тем больше
диапазон чисел от очень маленьких до очень больших, которые могут быть представлены.При фиксированном количестве бит очевиден компромисс между точностью
и диапазон.
Когда мы представляем эти числа в компьютере, мы должны сначала принять
соглашение. В отличие от символьных данных и целых чисел не существует единого стандарта.
Каждая конвенция имеет свои преимущества и недостатки, и необходимо учитывать компромиссы.
при проектировании компьютера. Мы кратко рассмотрим два разных
методы, один из которых используется мэйнфреймами IBM и один стандарт IEEE, который используется
большинством ПК и миникомпьютерами Hewlett / Packard.
2.2.9.1 Соглашение с плавающей запятой для мэйнфреймов IBM
Первое соглашение, известное как превышение (или смещение) 64 по основанию 16, используется
серия компьютеров IBM для мэйнфреймов, таких как IBM 370 и IBM 4341.
Стандартный размер слова составляет 32 бита и делится на три части.
— ——- ————————
0 1234567 84567845678901
1 2 3
, где биты пронумерованы от 0 до 31.Первый бит (бит 0) представляет
знак мантиссы. Биты с 8 по 31 представляют собой цифры
мантисса. Биты с 1 по 7 представляют как знак, так и цифры характеристики.
Значение 0; (т.е. отсутствие сдвигов характеристики) сохраняется как
10000000 2 или 2 +7 = 64.
Если есть положительный сдвиг, он добавляется к этому значению и отрицательный
сдвиг вычитается.Таким образом, характеристика всегда сохраняется.
как положительное число. Это может быть важно при разработке электронного
схемотехника арифметико-логического блока.
Есть еще одно соглашение, которому следует термин
«база 16». Каждое значение в характеристике указывает на сдвиг на 4 позиции.
или
2 +4 = 16.
Поскольку сдвиги всегда делятся на четыре единицы, нормализация должна
поместите первую ненулевую двоичную цифру в одну из первых четырех позиций
справа от двоичной точки.Эквивалентное утверждение должно сказать, что
первая шестнадцатеричная цифра справа от точки отлична от нуля.
Чтобы прояснить эти идеи, рассмотрим преобразование двух реальных
десятичные числа
+345,75 и -0,03125
до более чем 64 системы счисления по основанию 16. Используя методы, описанные ранее
в этой главе в двоичном формате мы имеем
+345.75 = +101011001,11
и
-0,03125 = -0,00001
В первом случае нормализация будет
0,0001010100111
, где мы сдвинули 12 позиций влево или 3 единицы по 4.
Во втором случае имеем
0.1
, где мы переместили 4 позиции вправо или одну единицу из четырех.
Для +345,75 характеристика становится
1000011 = 67
, указывающий на 3 смены положительный. Для -0,03125 характеристика становится
0111111 = 63
, указывающий на отрицательную смену.
Теперь мы можем комбинировать различные части, давая нам
345.75 = 0100 0011 1010 1100 1110 0000 0000 0000
= 4 3 А К Е 0 0 0 16
и
-0.03125 = 1011 1111 1000 0000 0000 0000 0000 0000 0000
= B F 8 0 0 0 0 0 16
Обратите внимание, что для ясности мы сгруппировали биты в единицах по четыре.
2.2.9.2 Стандарт одинарной точности с плавающей запятой IEEE
В 1985 году IEEE принял стандарт для представления действительных чисел в
Компьютерные системы.У них есть стандарты одинарной точности, двойной точности,
и числа с повышенной точностью.
Стандарт одинарной точности требует 32-битного (4 байта) числа. В
это соглашение, биты нумеруются с битом младшего разряда справа
как 0-й (нулевой бит) и самый левый бит как 31-й.
— ——- ————————
1 0987654 321098765432109876543210
3 2 1
Первый бит (бит 31) представляет знак мантиссы.Биты 30
через 23 представляют показатель степени или характеристику. Биты с 22 по 0
используются для мантиссы или дробной части. Нормализация должна иметь
первый ненулевой бит слева от двоичной точки. Этот бит не
хранится и называется скрытым битом . Предвзятость
2 7 -1 = 0111 111 2 = 127 10
Этапы преобразования :
Следующие шаги необходимы для преобразования из десятичной системы в двоичную IEEE.
обозначение.
1. Преобразуйте десятичное число в позиционное двоичное представление.
2. Нормализовать двоичное число до первого бита.
3. Вычислить двоичное представление экспоненты с помощью дополнения до двух. обозначение и добавьте избыточное смещение 127.4. Сохраните дробную часть (мантиссу) в поле мантиссы. (расположение бита с 22 до 0).
5. Сохраните вычисленную экспоненту в поле экспоненты (расположение битов С 30 по 23).
6. Введите бит знака, используя следующее соглашение:
1 => Отрицательное число 0 => положительное число Пример должен помочь прояснить обсуждение.
Преобразуйте следующее число
-26,59375
в представление с плавающей запятой IEEE.
1.Преобразовать в позиционную двоичную систему счисления. (Примечание: ИГНОРИРОВАТЬ ЗНАК)
26.59375 10 => 11010.10011 2
2. Нормализовать двоичное число до первого бита.
1.101010011 x 2 4
3. Вычислить двоичное представление экспоненты с помощью дополнения до двух.
обозначение и добавьте избыточное смещение 127.
0000 0100
Дополнительное обозначение: Для устранения проблем, представляющих отрицательные экспоненты мы будем использовать избыточную (или смещенную) запись.Проще говоря, мы будем добавить к значению фиксированную константу (или смещение) и сохранить это значение. В этом Отформатируйте смещение: 127 в десятичном формате или 0111 1111 в двоичном формате.
Показатель экспоненты 0000 0100 Значение смещения + 0111 1111
Превышение стоимости 1000 0011
4. Сохраните дробную часть (мантиссу) в поле значимости.
(расположение бита с 22 до 0).
5. Сохраните вычисленную экспоненту в поле экспоненты (расположение битов
С 30 по 23).
6. Введите бит знака.
Конечный результат
0100 0001 1101 0100 1100 0000 0000 0000
4 1 D 4 C 0 0 0 16
Это представление 26,59375 стандарта IEEE Single Precision.
Что случилось с ведущим 1 битом? Как упоминалось выше, в этом представлении
схема считается СКРЫТЫМ или ПОДРАЗУМЕВАЕМЫМ.На самом деле некоторые ссылаются на этот метод
как метод « скрытый бит ». Поскольку мы всегда нормализуем до ведущего
один бит, нет необходимости хранить его, потому что «все» знают, что
это там. ПОМНИТЕ, что при расшифровке числа в этом формате
вы должны вернуть скрытую часть на место.
Допуск или точность определяется количеством битов, используемых для
представляют собой дробную часть.
В качестве другого примера мы преобразуем число с плавающей запятой, хранящееся в
формат IEEE обратно в десятичный.Если число хранится в шестнадцатеричном формате, мы начинаем
сначала
2. Отметьте двоичные поля:
а. Знак (1 бит)г. Экспонента (8 бит)
г. Significand (23 бита)
3. Преобразуйте поле экспоненты вычитанием 127.4. Заменить «скрытый бит» и прикрепить мантиссу.
5. Сдвиг двоичной точки.
6. Преобразование двоичного действительного числа в десятичное действительное.
7. Поставьте правильный знак.
1. Преобразуйте шестнадцатеричные цифры в двоичные.
C0 CC C0 00 шестнадцатеричный => 1100 0000 1100 1100 1100 0000 0000 0000
2. Отметьте двоичные поля:
1 10000001 10011001 10000000 0000000
Знак экспонента значащий
3.Преобразуйте поле экспоненты, вычтя 127.
10000001 2 => 129 10
а. преобразовать в десятичную форму и вычесть 127
г. добавьте «минус» 127 (используйте дополнение до двух)
Значение смещения -127 10000001
Степень двойки 2 00000010 => 2
1.10011001100000000000000
Заменено представление скрытого бита.
1.10011001100000000000000 х 2 2
Сдвинуть двоичную точку вправо на две позиции
110.011001100000000000000
Это двоичное вещественное представление.
Преобразовать всю часть:
110 => 6Преобразуйте дробную часть: 011001100000000000000 =>
Позиционное обозначение => 2 -2 + 2 -3 + 2 -6 + 2 -7
Десятичное значение => 0,25 + 125 + 0,015625 + 0,0078125
=>.3984375
7. Поставьте правильный знак.Соедините детали и поставьте знак
— 6,3984375
Это десятичное значение, представленное шестнадцатеричным числом 60 66 60 00.
Миникомпьютеры серии HP 3000 использовали аналогичную технику, за исключением
смещение 128 = 2 7 = 1000 0000.
2.2.10 Дальность и точность
Очевидно, что чем больше количество битов, тем больше информации мы можем
хранить.Это относится как к целым, так и к действительным числам. В этом разделе мы
резюмирует некоторые из предыдущих утверждений о точности и диапазоне
двоичных чисел. Сначала мы рассмотрим целые числа, а затем действительные.
2.2.10.1 Диапазон и точность целых чисел
Используя два дополнения, мы можем составить следующую таблицу:
———————————————— ——————
Число наибольшее наибольшее число
бит Положительный Отрицательный
Номер Номер
———————————————— ——————
8 0111 1111 = 127 1000 0000 = -128
16 0111 1111 1111 1111 = 1000 0000 0000 0000 =
32 768 -32 768
32 0111 1111 1111 1111 1111 1111 1111 1111 =
2 147 483 647
1000 0000 0000 0000 0000 0000 0000 0000 =
-2 147 483 648
———————————————— ——————
Очевидно, что чем больше количество битов, тем больше целые числа, которые
могут быть представлены.В пределах ограничения размера представлены целые числа
именно в компе.
2.2.10.2 Диапазон и точность действительных чисел
Когда мы рассматриваем действительные числа, мы должны учитывать как характеристики
и мантисса. Характеристика определяет размер или диапазон чисел.
Для характеристики двух соглашений, рассмотренных в предыдущем
разделы у нас есть
———————————————— ——————
конвенция наибольшее число наименьшее число
———————————————— ——————
превышение 64 по основанию 16 1111111 = 16 +63 0000000 = 16 -65
(IBM) примерно = 7.2 х 10 +75 5,4 х 10 -79
избыток 127 основание 2 1111111 = 2 +63 0000000 = 2 -65
(IEEE) приблизительно = 9,2 x 10 +18 2,7 x 10 -20
————————— —————————————
Диапазон чисел становится более значимым, когда мы понимаем, что каждый
степень десяти представляет собой ноль справа или слева от десятичной точки.Это означает, что наибольшее число, использующее соглашение о превышении 64, будет
10000000 … (75 нулей) … 000
, а наименьшее число —
0,00000 … (79 нулей) … 00001
Конечно, очень большое и очень маленькое количество.
Точность или количество значащих цифр зависит от числа
бит в мантиссе.Хотя оба соглашения имеют 24 бита в
мантисса, соглашение о превышении 64, из-за соглашения о смещении,
может потерять три из них, что даст только 21 бит точности. Таким образом, у нас есть
наибольшее число как лишнее 64 по основанию 16
2 +21 -1 = 2 097 151
или приблизительно 7 десятичных знаков точности.
Для лишних 127 оснований 2 у нас есть 23 бита, но у нас также есть дополнительные
скрытый бит, дающий нам 24 бита точности или
2 +24 -1 = 16 777 215
или примерно 8 десятичных цифр.
Используются другие соглашения или форматы. Большинство компьютеров также имеют
возможность использовать больше битов, если указано. Обычно это называется двойной точностью.
Затем дизайнеры решают, увеличивать ли диапазон (характеристику)
или точность (мантисса), или и то, и другое. О семействе компьютеров IBM 64 бита
используются с дополнительными 32 битами, используемыми только для мантиссы.
Скорость и точность компьютера тесно связаны с числовой
представления и встроенные логические схемы.Чем больше битов используется в представлении,
тем больше логики требуется для выполнения данного вычисления. Большинство персональных компьютеров
выполнять 16 или 32 бита за раз. Мэйнфреймы и суперкомпьютеры работают
логика от 32 до более 60 бит за раз. Очевидно, что чем больше битов
обрабатывается за один раз, тем быстрее машина.
Различия могут быть гораздо более существенными, поскольку машины меньшего размера
может потребоваться извлечь много байтов из памяти по одному, что замедлит
вниз по обработке еще больше.Есть еще один важный момент, когда
учитывая скорость и мощность разных процессоров. Большинство машин
представляют собой действительные числа в одном из приведенных соглашений или что-то очень
похожий. Однако многие персональные компьютеры имеют только целочисленные логические схемы.
в арифметико-логическом блоке. Для выполнения стандартных арифметических операций
такие как сложение и умножение действительных чисел, они должны выполнять
относительно сложные программы.
С другой стороны, более крупные машины, такие как мэйнфреймы и суперкомпьютеры
иметь аппаратную логику, которая работает непосредственно с действительными числами.Специальный
доступно расширение для ПК, называемое процессором с плавающей запятой который выполняет эти функции. Это возможно для современного суперкомпьютера
до более чем в миллион раз быстрее и мощнее, чем обычный персональный
компьютер. Наше обсуждение в этом разделе далеко от завершения. Цель
познакомил вас с разнообразием решений, доступных для хранения
числовые данные и некоторые конструктивные особенности, необходимые для
разработка вычислительной системы.
2.3 Слова
В этой главе мы рассмотрели представление символов
и числа внутри компьютера в виде определенных битовых комбинаций. Также в главе
1 мы кратко обсудили представление инструкций и адресов памяти в виде
битовые шаблоны. Таким образом, мы видим, что существует четыре различных количества, которые
могут быть представлены битовыми комбинациями; символы, цифры, инструкции и
адреса.Часто один и тот же битовый шаблон может использоваться для
представляют разные вещи. Например узор
0100 0001
— это буква «A» в кодировке ASCII или целое число 65 в двоичном формате. Это важно
чтобы понять, что конкретная битовая комбинация приобретает значение только в пределах
контекст его использования. С 0100 0001, хранящимся в компьютере, все, что у нас есть
это битовый шаблон, и без контекста использования мы не знаем, что это
средства.
С четырьмя различными типами информации, хранящейся в компьютерных
память, важно иметь возможность получать доступ и управлять произвольным
количество эффективно. Для этого необходимо использовать
регистры в ALU фиксированного размера. Этот размер должен быть
выбирается так, чтобы соответствовать количеству битов в инструкции и в
адрес. Размер регистров также должен соответствовать
представление как буквенно-цифровых, так и числовых данных.
Связанное с этим соображением является количество битов, которые могут одновременно
передаваться между памятью и АЛУ. Путь передачи называется
шина и количество битов, которые могут быть переданы за один раз
называется шиной шириной .
В большинстве вычислительных систем одно заданное количество битов называется словом выбрано, чтобы удовлетворить этим ограничениям. Обычно слово будет состоять
из нескольких байтов.Ширина автобуса позволит одному или целому количеству
слова (два, три или четыре), передаваемые за один раз. Размер инструкции
будет соответствовать размеру слова. В некоторых системах размер инструкции и
размер слова будет таким же. Иногда слово содержит целое число
инструкций или инструкций потребуется целое количество слов.
Регистры в ALU также будут соответствовать размеру слова. Наконец-то,
адресное пространство также будет соответствовать размеру слова.
Размер слова использовался для различения разных классов
компьютеров. Сегодня, когда ПК стали более мощными, это использование стало
менее значимый. Типичные размеры слова для ПК — 16 и 32 бита. Мэйнфреймы
слово может содержать 32 или более бита. Суперкомпьютеры часто имеют размер слова
60 и более бит.
Наборы команд, адресное пространство и форматы данных связаны с
по размеру слова.По этой причине важно, чтобы размер слова был
выбран во время разработки и не может быть изменен.
2.4 Проверка четности
Для обеспечения целостности данных используется множество различных методов. Один метод
используется при передаче данных из одной точки в другую, называется четностью проверка . К каждому передаваемому блоку добавляется бит четности или контрольный бит.
Этот бит выбран так, чтобы всегда было четное число включенных
переданные биты (единицы) (, четность, ) или нечетное количество включенных битов
передано ( с нечетной четностью ).После передачи количество включенных
бит проверяется, если четность изменилась, система знает, что как минимум
один бит изменился и может сигнализировать об ошибке или предпринять корректирующие действия.
Обычно запрос на ретрансляцию запрашивается автоматически и только
после нескольких сбоев выдается фактическое сообщение об ошибке.
Чтобы увидеть, как формируются биты четности, мы можем обратиться к Рисунку 2.11. Рассмотреть возможность
семибитное представление ASCII буквы C, 1000011.Есть
три единицы, 1 0000 11 . Нечетность требует нечетного количества
1, поэтому бит четности равен 0, что дает восьмибитное представление
1000011 0 .
С другой стороны, четность требует четного числа единиц, поэтому
бит четности равен 1, что дает восьмибитное представление
1000011 1 .
Конечно, этот метод не будет работать, если изменить два бита.Тем не мение,
предположим, что вероятность изменения бита при передаче равна 0,000000001,
тогда вероятность изменения двух битов равна 0,000000000000000001.
Действительно, очень маленький!
СПИСОК ЦИФР
Рисунок 2.1 Формат BCD
Рисунок 2.1 Таблица кодов BCD
Рисунок 2.3 Кодовая таблица EBCDIC
Рисунок 2.4 Таблица кодов ASCII
Рисунок 2.5 Подсчет по разным основаниям
Рисунок 2.6 Упакованные и распакованные десятичные числа
Рисунок 2.7 Дамп ядра
Рисунок 2.8 Степень двойки
Рисунок 2.9 Дополнение таблицы 2 и 10
Рисунок 2.10 Таблица истинности для полного двоичного сложения
Рисунок 2.11 Четность
Этот курс был преобразован в электронный формат. для использования на
Государственный университет Мюррея и
Кафедра компьютерных наук и информационных систем
Использование этого материала только в образовательных целях регулируется
определение добросовестного использования (Раздел
107) У.S. Закон об авторском праве.
Материалы курса являются собственностью Р. А. Пилигрима
Все права защищены
Представление чисел в компьютере. Представление целых и действительных чисел в памяти компьютера
Всем, кто хоть раз задумывался о жизни, чтобы стать «айтишником» или системным администратором и просто связать судьбу с компьютерными технологиями, знание того, как представление чисел в памяти компьютера, абсолютно необходимо.Ведь это основа низкоуровневых языков программирования, таких как Ассемблер. Поэтому сегодня мы рассмотрим представление чисел в компьютере и их размещение в ячейках памяти.
Обозначение
Если вы читаете эту статью, то, скорее всего, уже о ней знаете, но стоит повторить. Все данные в персональном компьютере хранятся в двоичной системе. Это значит, что любое число должно быть представлено в соответствующей форме, то есть состоящее из нулей и единиц.
Для того, чтобы перевести привычные для нас десятичные числа, на понятный компьютер, нам необходимо воспользоваться описанным ниже алгоритмом. Также существуют специализированные калькуляторы.
Итак, чтобы перевести число в двоичную систему счисления, нужно взять выбранное значение и разделить его на 2. После этого получаем результат и остаток (0 или 1). Результат снова разделите 2 и запомните остаток. Эту процедуру следует повторять до тех пор, пока результат также не станет 0 или 1. Затем запишите окончательное значение и остатки в обратном порядке, как мы их получили.
Вот как числа представлены в компьютере. Любое число записывается в двоичной форме, а затем занимает место в памяти.
Память
Как вы уже должны знать, минимальная единица информации составляет 1 бит. Как мы уже видели, представление чисел в компьютере происходит в двоичном формате. Таким образом, каждый бит памяти будет занят одним значением — 1 или 0.
Для хранения больших чисел используются ячейки. Каждая такая единица содержит до 8 бит информации.Следовательно, мы можем сделать вывод, что минимальное значение в каждом сегменте памяти может составлять 1 байт или быть восьмизначным двоичным числом.
Whole
Наконец мы дошли до непосредственного расположения данных в компьютере. Как уже было сказано, процессор сначала переводит информацию в двоичный формат, а уже потом помещает ее в память.
Начнем с простейшего варианта — представления целых чисел на компьютере. Память ПК распределяет этот процесс по смехотворно малому количеству ячеек — только одной.Таким образом, максимум в одном слоте может быть от 0 до 11111111. Переведем максимальное число в обычный вид записи.
X = 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 1 × 2 8 — 1 = 255.
Теперь мы видим, что в одной ячейке памяти может быть значение от 0 до 255. Однако это относится только к неотрицательным целым числам. Если компьютеру нужно записать отрицательное значение, все пойдет немного иначе.
Отрицательные числа
Теперь посмотрим, как происходит представление чисел в компьютере, если они отрицательные. Чтобы разместить значение меньше нуля, выделяются две ячейки памяти или 16 бит информации. В этом случае 15 идет под самим номером, а первый (крайний левый) бит указывается под соответствующим знаком.
Если цифра отрицательная, то записывается «1», если положительная, то «0». Для простоты запоминания можно провести аналогию: если есть знак, то установите 1, если его нет, то ничего (0).
Оставшимся 15 битам информации присваивается номер. Как и в предыдущем случае, они могут поставить максимум пятнадцать единиц. Стоит отметить, что запись отрицательных и положительных чисел существенно отличается друг от друга.
Чтобы поместить в 2 ячейки памяти значение больше нуля или равное ему, используется так называемый прямой код. Эта операция выполняется так же, как было описано, и максимальное значение A = 32766, если вы используете десятичную систему счисления.Сразу хочу отметить, что в данном случае «0» относится к положительному.
Примеры
Представление целых чисел в памяти компьютера не является такой сложной задачей. Хотя это немного сложнее, если это негативный смысл. Для записи числа меньше нуля используется дополнительный код.
Для его получения машина выполняет ряд вспомогательных операций.
- Во-первых, модуль отрицательного числа записывается в двоичной системе счисления.То есть компьютер запоминает подобное, но положительное значение.
- Затем каждый бит памяти инвертируется. Для этого все единицы заменяются нулями и наоборот.
- Добавьте к результату «1». Это будет дополнительный код.
Вот наглядный пример. Предположим, у нас есть число X = -131. Сначала получаем его модуль | X | = 131. Затем переводим в двоичную систему и записываем в 16 ячеек. Получаем X = 0000000010000011. После инвертирования X = 1111111101111100.Мы добавляем к нему «1» и получаем обратный код X = 1111111101111101. Для записи в 16-битную ячейку памяти минимальное число: X = — (2 15 ) = — 32767.
Длинные целые числа
As Как видите, представление действительных чисел на компьютере не так уж и сложно. Однако для большинства операций этого диапазона может быть недостаточно. Следовательно, чтобы вместить большие числа, компьютер выделяет из памяти 4 ячейки или 32 бита.
Процесс записи не отличается от представленного выше.Итак, мы просто даем диапазон чисел, которые могут быть сохранены в данном типе.
X max = 2 147 483 647.
X min = — 2 147 483 648.
В большинстве случаев этих значений достаточно для записи и выполнения операций с данными.
Представление действительных чисел в компьютере имеет свои достоинства и недостатки. С одной стороны, этот метод упрощает выполнение операций между целочисленными значениями, что значительно ускоряет работу процессора.С другой стороны, этого диапазона недостаточно для решения большинства задач экономики, физики, арифметики и других наук. Поэтому теперь мы рассмотрим следующую технику для супергрупп.
Плавающая точка
Это последнее, что вам нужно знать о представлении чисел в компьютере. Поскольку при записи дробей возникает проблема определения положения в них запятой, для размещения таких чисел в компьютере используется экспоненциальная форма.
Любое число можно представить в следующем виде X = m * p P .Где m — мантисса числа, p — основание системы счисления, а n — порядок числа.
Для стандартизации записи чисел с плавающей запятой используется следующее условие, согласно которому модуль мантиссы должен быть больше или равен 1 / n и меньше 1.
Предположим, нам дано число 666,66 . Приведем его к экспоненциальному виду. Получится X = 0,66666 * 10 3 . P = 10 и n = 3.
Хранение значений с плавающей запятой обычно составляет 4 или 8 байтов (32 или 64 бита).В первом случае это называется числом обычной точности, а во втором — двойной точностью.
Из 4 байтов, выделенных для хранения чисел, 1 (8 бит) отводится под данные о порядке и его знаке, а 3 байта (24 бита) помещаются на мантиссу и ее знак в соответствии с теми же принципами, что и для целых чисел. ценности. Зная это, мы можем провести несложные вычисления.
Максимальное значение n = 1111111 2 = 127 10 . Исходя из этого, мы можем получить максимальный размер числа, которое может храниться в памяти компьютера.Х = 2 127 . Теперь мы можем вычислить максимально возможную мантиссу. Он будет равен 2 23 — 1 ≥ 2 23 = 2 (10 × 2,3) ≥ 1000 2,3 = 10 (3 × 2,3) ≥ 10 7 . В результате мы получили приблизительную стоимость.
Если теперь объединить оба вычисления, мы получим значение, которое можно без потерь записать в 4 байта памяти. Он будет равен X = 1,701411 * 10 38 . Остальные цифры были отброшены, так как именно такая точность делает возможным этот метод записи.
Двойная точность
Поскольку все расчеты расписаны и объяснены в предыдущем абзаце, здесь мы расскажем обо всем очень кратко. Для чисел с двойной точностью обычно отводится 11 цифр для порядка и его знака, а также 53 цифры для мантиссы.
P = 1111111111 2 = 1023 10 .
M = 2 52 -1 = 2 (10 * 5,2) = 1000 5,2 = 10 15,6 . Округлите и получите максимальное число X = 2 1023 с точностью до «м».
Мы надеемся, что информация о представлении целых и действительных чисел в компьютере, которую мы предоставили, будет полезна вам при обучении и будет хотя бы немного яснее, чем то, что обычно пишут в учебниках.
Фиксированная точка (целые числа)
Представление с фиксированной точкой используется для хранения целых чисел , положительных и отрицательных целые числа:… -3, -2, -1, 0, 1, 2, 3,…. Программы высокого уровня, такие как C и BASIC, обычно выделяют 16 бит для хранения каждого целого числа.В простейшем случае 2 16 = 65 536 возможных битовых комбинаций присваиваются номерам от 0 до 65 535. Это называется беззнаковым целочисленным форматом, и упрощенный пример показан на рис. 4-1. (используя только 4 бита на число). Преобразование между битовой комбинацией и представляемое число — это не что иное, как изменение между основанием 2 (двоичный) и основание 10 (десятичное). Недостаток беззнакового целого числа в том, что отрицательные числа не могут быть представлены.
Двоичное смещение аналогично целому числу без знака, за исключением десятичных значений. сместил , чтобы учесть отрицательные числа.В 4-битном примере на рис. 4-1 десятичные числа смещены на семь , что приводит к 16-битным шаблонам соответствующие целым числам от -7 до 8. Таким же образом, 16 битовое представление будет использовать 32 767 в качестве смещения, что приведет к диапазону между -32 767 и 32 768. Смещение двоичного файла не является стандартизированным форматом, и вы найти другие используемые смещения, например 32 768. Наиболее важное использование двоичного смещения находится в АЦП и ЦАП. Например, диапазон входного напряжения от -5 В до 5 В может быть сопоставлены с цифровыми числами от 0 до 4095 для 12-битного преобразования.
Знак и величина — еще один простой способ представления отрицательных целых чисел. Крайний левый бит называется битом знака, и для положительных чисел ему задается ноль , и , один для отрицательных чисел. Остальные биты являются стандартными двоичными представление абсолютного значения числа. Это приводит к потере одного битовый шаблон, поскольку есть два представления для нуля, 0000 (положительный ноль) и 1000 (отрицательный ноль). Эта схема кодирования приводит к 16-битным числам, имеющим диапазон от -32 767 до 32 767.
Эти первые три представления концептуально просты, но их трудно понять. реализовать аппаратно. Помните, когда A = B + C вводится в компьютер программе, какой-то инженер по аппаратному обеспечению должен был придумать, как сделать битовую комбинацию представляющий B, объединить с битовой комбинацией, представляющей C, чтобы сформировать бит узор, представляющий A.
Два дополнения — это формат, который любят инженеры по аппаратному обеспечению, и именно так целые числа обычно представлены в компьютерах.Чтобы понять кодировку сначала посмотрите на десятичное число ноль на рис. 4-1, которое соответствует двоичный ноль, 0000. Когда мы считаем вверх, десятичное число — это просто двоичный эквивалент (0 = 0000, 1 = 0001, 2 = 0010, 3 = 0011 и т. д.). Теперь, помните, что эти четыре бита хранятся в регистре, состоящем из 4 триггеров. Если мы снова начнем с 0000 и начнем вычитание, цифровое оборудование автоматически считается с дополнением до двух: 0 = 0000, -1 = 1111, -2 = 1110, -3 = 1101 и т. Д.Это аналог одометра в новом автомобиле. Если гонят вперед он меняется: 00000, 00001, 00002, 00003 и так далее. Когда везут назад, одометр меняется: 00000, 99999, 99998, 99997 и т.д.
Используя 16 бит, дополнение до двух может представлять числа от -32 768 до 32 767. Самый левый бит — 0, если число положительное или ноль, и 1, если число отрицательный. Следовательно, самый левый бит называется битом знака, как и в знаке & представление величины.Преобразование десятичной дроби в двойку дополнение является простым для положительных чисел, от простого десятичного до двоичного конверсия. Для отрицательных чисел часто используется следующий алгоритм: (1) взять абсолютное значение десятичного числа, (2) преобразовать его в двоичное, (3) дополнить все биты (единицы становятся нулями, а нули становятся единицами), (4) добавить 1 в двоичное число. Например: -5 → 5 → 0101 → 1010 → 1011. Двойки комплемент труден для человека, но легко для цифровой электроники.
Числа в Python — Настоящий Python
Чтобы хорошо программировать, не нужно быть математиком. По правде говоря, немногим программистам нужно знать больше, чем основы алгебры. Конечно, то, сколько математики вам нужно знать, зависит от приложения, над которым вы работаете. В целом, уровень математики, необходимый для программирования, ниже, чем вы могли ожидать. Хотя математика и компьютерное программирование не так взаимосвязаны, как некоторые могут подумать, числа , являются неотъемлемой частью любого языка программирования, и Python не исключение.
Из этого руководства вы узнаете, как:
- Создание целых чисел и чисел с плавающей запятой
- Округлить числа до заданного количества десятичных знаков
- Формат и отображение чисел в строках
Приступим!
Примечание: Это руководство адаптировано из главы «Числа и математика» в книге Основы Python: практическое введение в Python 3 .
В книге используется встроенный редактор IDLE Python для создания и редактирования файлов Python и взаимодействия с оболочкой Python, поэтому в этом руководстве вы увидите ссылки на встроенные инструменты отладки IDLE. Однако у вас не должно возникнуть проблем с запуском примера кода из редактора и среды по вашему выбору.
Бесплатный бонус: 5 мыслей о Python Mastery, бесплатный курс для разработчиков Python, который показывает вам план действий и образ мышления, которые вам понадобятся, чтобы вывести свои навыки Python на новый уровень.
Целые числа и числа с плавающей запятой
Python имеет три встроенных числовых типа данных: целые числа, числа с плавающей запятой и комплексные числа. В этом разделе вы узнаете о целых числах и числах с плавающей запятой, которые являются двумя наиболее часто используемыми типами чисел. Вы узнаете о комплексных числах в следующем разделе.
Целые числа
Целое число — это целое число без десятичных знаков. Например, 1
— целое число, а 1.0
— нет. Имя для целочисленного типа данных — int
, которое вы можете увидеть с помощью type ()
:
>>> тип (1)
<класс 'int'>
Вы можете создать целое число, набрав желаемое число. Например, следующее присваивает целое число 25
переменной num
:
Когда вы создаете такое целое число, значение 25
называется целочисленным литералом , потому что целое число буквально вводится в код.
Возможно, вы уже знакомы с тем, как преобразовать строку, содержащую целое число, в число с помощью int ()
. Например, следующее преобразует строку "25"
в целое число 25
:
int ("25")
не является целочисленным литералом, поскольку целочисленное значение создается из строки.
Когда вы пишете большие числа от руки, вы обычно группируете цифры в группы по три, разделенные запятой или десятичной точкой. Число 1000000 читать намного легче, чем число 1000000.
В Python нельзя использовать запятые для группировки цифр в целочисленных литералах, но можно использовать символы подчеркивания ( _
). Оба следующих способа являются допустимыми способами представления числа один миллион в виде целочисленного литерала:
>>> 1000000
1000000
>>> 1_000_000
1000000
Нет предела тому, насколько большим может быть целое число, что может быть удивительно, учитывая, что компьютеры имеют конечный объем памяти. Попробуйте ввести наибольшее число, которое вы можете придумать, в интерактивном окне IDLE.Python справится с этим без проблем!
Числа с плавающей запятой
Число с плавающей запятой или с плавающей запятой для краткости — это число с десятичной запятой. 1,0
— это число с плавающей запятой, как и -2,75
. Имя типа данных с плавающей запятой — float
:
>>> тип (1.0)
<класс 'float'>
Как и целые числа, числа с плавающей запятой могут быть созданы из литералов с плавающей запятой или путем преобразования строки в число с плавающей запятой с помощью float ()
:
>>> float ("1.25 дюймов)
1,25
Есть три способа представить литерал с плавающей запятой. Каждое из следующих действий создает литерал с плавающей запятой со значением один миллион:
>>> >>> 1000000.0
1000000,0
>>> 1_000_000.0
1000000,0
>>> 1e6
1000000,0
Первые два способа аналогичны двум методам создания целочисленных литералов. Третий подход использует нотацию E для создания литерала с плавающей запятой.
Примечание. Обозначение E является сокращением от экспоненциального представления .Возможно, вы видели, что это обозначение используется калькуляторами для представления чисел, которые слишком велики для отображения на экране.
Чтобы написать литерал с плавающей запятой в нотации E, введите число, за которым следует буква e
, а затем еще одно число. Python берет число слева от e
и умножает его на 10
, возведенное в степень числа после e
. Итак, 1e6
эквивалентно 1 × 10⁶.
Python также использует нотацию E для отображения больших чисел с плавающей запятой:
>>> >>> 200000000000000000.0
2e + 17
Поплавок 200000000000000000.0
отображается как 2e + 17
. Знак +
указывает, что показатель степени 17
является положительным числом. Вы также можете использовать отрицательные числа в качестве экспоненты:
Литерал 1e-4
интерпретируется как 10
в степени -4
, что составляет 1/10000, или 0,0001
.
В отличие от целых чисел, числа с плавающей точкой имеют максимальный размер. Максимальное число с плавающей запятой зависит от вашей системы, но что-то вроде 2e400
должно выходить за рамки возможностей большинства машин. 2e400
равно 2 × 10⁴⁰⁰, что намного больше, чем общее количество атомов во Вселенной!
При достижении максимального числа с плавающей запятой Python возвращает специальное значение с плавающей запятой, inf
:
inf
означает бесконечность, и это просто означает, что число, которое вы пытались создать, превышает максимальное значение с плавающей запятой, разрешенное на вашем компьютере. Тип inf
по-прежнему float
:
>>> п = 2e400
>>> п
инф
>>> тип (n)
<класс 'float'>
Python также использует -inf
, что означает отрицательную бесконечность и представляет собой отрицательное число с плавающей запятой, которое превышает минимальное число с плавающей запятой, разрешенное на вашем компьютере:
Вы, вероятно, не будете часто встречать inf
и -inf
как программист, если только вы не работаете регулярно с очень большими числами.
Проверьте свое понимание
Разверните блок ниже, чтобы проверить свое понимание:
Напишите программу, которая создает две переменные: num1
и num2
. И num1
, и num2
должны быть присвоены целочисленный литерал 25000000
, один записанный с подчеркиванием, а другой без. Выведите num1
и num2
на двух отдельных строках.
Вы можете развернуть блок ниже, чтобы увидеть решение:
Сначала присвойте значение 25000000
num1
без подчеркивания:
Затем в новой строке присвойте значение 25_000_000
переменной num2
:
Распечатайте обе переменные в отдельных строках, передав каждую переменную в отдельные вызовы print ()
:
В выводе видно, что оба числа совпадают:
Хотя обеим переменным присвоено значение 25000000
, запись значения с использованием подчеркивания для группировки цифр значительно упрощает человеку быстрое определение числа.Больше не надо щуриться в экран и считать нули!
Когда будете готовы, можете переходить к следующему разделу.
Арифметические операторы и выражения
В этом разделе вы узнаете, как выполнять базовые арифметические операции, такие как сложение, вычитание, умножение и деление, с числами в Python. Попутно вы узнаете некоторые правила написания математических выражений в коде.
Дополнение
Сложение производится оператором +
:
Два числа по обе стороны от оператора +
называются операндами .В приведенном выше примере оба операнда являются целыми числами, но операнды не обязательно должны быть одного типа.
Вы можете без проблем добавить int
к float
:
Обратите внимание, что результат 1.0 + 2
равен 3.0
, что является числом с плавающей запятой
. Каждый раз, когда к числу добавляется число с плавающей запятой
, результатом является еще одно число с плавающей запятой
. Сложение двух целых чисел всегда приводит к int
.
Примечание: PEP 8 рекомендует разделять оба операнда от оператора пробелом.
Python может без проблем вычислить 1 + 1
, но 1 + 1
является предпочтительным форматом, поскольку его обычно легче читать. Это практическое правило применимо ко всем операторам в этом разделе.
Вычитание
Чтобы вычесть два числа, просто поставьте между ними оператор -
:
>>> 1 - 1
0
>>> 5,0 - 3
2.0
Как и при сложении двух целых чисел, вычитание двух целых всегда приводит к int
.Если одним из операндов является число с плавающей запятой
, результатом также будет число с плавающей запятой
.
Оператор -
также используется для обозначения отрицательных чисел:
Вы можете вычесть отрицательное число из другого числа, но, как вы можете видеть ниже, это иногда может сбивать с толку:
>>> >>> 1 - -3
4
>>> 1 --3
4
>>> 1- -3
4
>>> 1--3
4
Из четырех приведенных выше примеров первый наиболее соответствует требованиям PEP 8.Тем не менее, вы можете заключить -3
в круглые скобки, чтобы было еще яснее, что второй -
изменяет 3
:
Использование круглых скобок — хорошая идея, потому что они делают ваш код более ясным. Компьютеры выполняют код, но люди читают код. Все, что вы можете сделать, чтобы ваш код было легче читать и понимать, — это хорошо.
Умножение
Чтобы умножить два числа, используйте оператор *
:
>>> 3 * 3
9
>>> 2 * 8.0
16.0
Тип числа, полученного при умножении, подчиняется тем же правилам, что и сложение и вычитание. Умножение двух целых чисел дает int
, а умножение числа на float
дает float
.
Дивизия
Оператор /
используется для деления двух чисел:
>>> 9/3
3.0
>>> 5,0 / 2
2,5
В отличие от сложения, вычитания и умножения, деление с оператором /
всегда возвращает с плавающей точкой
.Если вы хотите получить целое число после деления двух чисел, вы можете использовать int ()
для преобразования результата:
Имейте в виду, что int ()
отбрасывает любую дробную часть числа:
5,0 / 2
возвращает число с плавающей запятой 2,5
, а int (2,5)
возвращает целое число 2
с удаленным ,5
.
Целочисленное деление
Если написание int (5.0 / 2)
кажется вам немного затянувшимся, Python предоставляет второй оператор деления, называемый оператором целочисленного деления ( //
), также известный как оператор деления этажа :
>>> 9 // 3
3
>>> 5.0 // 2
2.0
>>> -3 // 2
-2
Оператор //
сначала делит число слева на число справа, а затем округляет до целого числа. Это может не дать ожидаемого значения, когда одно из чисел отрицательное.
Например, -3 // 2
возвращает -2
. Сначала -3
делится на 2
, чтобы получить -1,5
. Затем -1,5
округляется до -2
. С другой стороны, 3 // 2
возвращает 1
, потому что оба числа положительны.
Приведенный выше пример также показывает, что //
возвращает число с плавающей запятой, когда один из операндов с плавающей запятой
. Вот почему 9 // 3
возвращает целое число 3
, а 5,0 // 2
возвращает число с плавающей запятой
2,0
.
Давайте посмотрим, что произойдет, если вы попытаетесь разделить число на 0
:
>>> 1/0
Отслеживание (последний вызов последний):
Файл "", строка 1, в
ZeroDivisionError: деление на ноль
Python дает вам ZeroDivisionError
, сообщая вам, что вы только что пытались нарушить фундаментальное правило вселенной.
Экспоненты
Вы можете возвести число в степень с помощью оператора **
:
>>> 2 ** 2
4
>>> 2 ** 3
8
>>> 2 ** 4
16
Показатели не обязательно должны быть целыми числами. Также они могут быть поплавками:
>>> >>> 3 ** 1,5
5,196152422706632
>>> 9 ** 0,5
3.0
Возведение числа в степень 0,5
аналогично извлечению квадратного корня, но обратите внимание, что даже если квадратный корень из 9
является целым числом, Python возвращает с плавающей запятой
3.0
.
Для положительных операндов оператор **
возвращает int,
, если оба операнда являются целыми числами, и с плавающей запятой,
, если любой из операндов является числом с плавающей запятой.
Вы также можете возводить числа в отрицательную степень:
>>> >>> 2 ** -1
0,5
>>> 2 ** -2
0,25
Возведение числа в отрицательную степень аналогично делению 1
на число в положительной степени.Итак, 2 ** -1
совпадает с 1 / (2 ** 1)
, что совпадает с 1/2
или 0,5
. Аналогично, 2 ** -2
совпадает с 1 / (2 ** 2)
, что совпадает с 1/4
или 0,25
.
Оператор модуля
Оператор %
или модуль возвращает остаток от деления левого операнда на правый операнд:
>>> 5% 3
2
>>> 20% 7
6
>>> 16% 8
0
3
делит 5
один раз на остаток 2
, поэтому 5% 3
равно 2
.Аналогично, 7
делит 20
дважды с остатком 6
. В последнем примере 16
делится на 8
, поэтому 16% 8
равно 0
. Каждый раз, когда число слева от %
делится на число справа, результат будет 0
.
Одно из наиболее распространенных применений %
— определить, делится ли одно число на другое. Например, число n
будет четным тогда и только тогда, когда n% 2
равно 0
.Как вы думаете, что возвращает 1% 0
? Давай попробуем:
>>> 1% 0
Отслеживание (последний вызов последний):
Файл "", строка 1, в
ZeroDivisionError: целочисленное деление или по модулю нуля
Это имеет смысл, потому что 1% 0
дает остаток от деления 1
на 0
. Но вы не можете разделить 1
на 0
, поэтому Python вызывает ZeroDivisionError
.
Примечание. Когда вы работаете в интерактивном окне IDLE, такие ошибки, как ZeroDivisionError
, не вызывают особых проблем.Отображается ошибка и появляется новое приглашение, позволяющее продолжить писать код.
Однако, когда Python обнаруживает ошибку при запуске скрипта, выполнение останавливается. Другими словами, программа вылетает из . В главе 8 документа Основы Python вы узнаете, как обрабатывать ошибки, чтобы ваши программы не зависали неожиданно.
Все становится немного сложнее, если вы используете оператор %
с отрицательными числами:
>>> 5% -3
-1
>>> -5% 3
1
>>> -5% -3
-2
Хотя эти результаты на первый взгляд могут шокировать, они являются результатом четко определенного поведения в Python.Чтобы вычислить остаток r
от деления числа x
на число y
, Python использует уравнение r = x - (y * (x // y))
.
Например, чтобы найти 5% -3
, Python сначала находит (5 // -3)
. Поскольку 5 / -3
составляет около -1,67
, это означает, что 5 // -3
— это -2
. Теперь Python умножает это на -3
, чтобы получить 6
. Наконец, Python вычитает 6
из 5
, чтобы получить -1
.
Арифметические выражения
Вы можете комбинировать операторы для формирования сложных выражений. Выражение — это комбинация чисел, операторов и скобок, которую Python может вычислить или оценить , чтобы вернуть значение.
Вот несколько примеров арифметических выражений:
>>> >>> 2 * 3 - 1
5
>>> 4/2 + 2 ** 3
10.0
>>> -1 + (-3 * 2 + 4)
-3
Правила вычисления выражений такие же, как и в повседневной арифметике.В школе вы, наверное, выучили эти правила под названием , порядок операций .
Операторы *
, /
, //
и %
все имеют одинаковый приоритет или приоритет в выражении, и каждый из них имеет более высокий приоритет, чем +
и -
оператора. Вот почему 2 * 3 - 1
возвращает 5
, а не 4
. 2 * 3
оценивается первым, потому что *
имеет более высокий приоритет, чем оператор -
.
Вы можете заметить, что выражения в предыдущем примере не соответствуют правилу помещения пробелов по обе стороны от всех операторов. PEP 8 говорит о пробелах в сложных выражениях:
Если используются операторы с разными приоритетами, рассмотрите возможность добавления пробелов вокруг операторов с самым низким приоритетом (-ами). Используйте свое собственное суждение; однако никогда не используйте более одного пробела и всегда используйте одинаковое количество пробелов с обеих сторон двоичного оператора.(Источник)
Еще одна хорошая практика — использовать круглые скобки для обозначения порядка, в котором должны выполняться операции, даже если скобки не нужны. Например, (2 * 3) - 1
потенциально яснее, чем 2 * 3 — 1.
Заставьте Python лгать
Как вы думаете, что такое 0,1 + 0,2
? Ответ: 0,3
, верно? Посмотрим, что скажет об этом Python. Попробуйте это в интерактивном окне:
>>> 0.1 + 0,2
0,30000000000000004
Ну вот и все. . . почти правильно. Что, черт возьми, здесь происходит? Это ошибка в Python?
Нет, это не ошибка! Это ошибка представления с плавающей запятой , и она не имеет ничего общего с Python. Это связано с тем, как числа с плавающей запятой хранятся в памяти компьютера.
Число 0,1
можно представить в виде дроби 1/10
. И число 0,1
, и его дробная часть 1/10
являются десятичными представлениями или десятичными представлениями .Компьютеры, однако, хранят числа с плавающей запятой в представлении с основанием 2, чаще называемом двоичным представлением .
При представлении в двоичном формате с десятичным числом 0,1
происходит что-то знакомое, но, возможно, неожиданное. Дробь 1/3
не имеет конечного десятичного представления. То есть 1/3 = 0,3333 ...
с бесконечным числом 3 после десятичной точки. То же самое происходит с двоичной дробью 1/10
.
Двоичное представление 1/10
представляет собой следующую бесконечно повторяющуюся дробь:
0.00011001100110011001100110011 ...
Компьютеры имеют ограниченную память, поэтому число 0,1
должно храниться как приблизительное, а не как его истинное значение. Сохраняемое приближение немного выше фактического значения и выглядит так:
0,1000000000000000055511151231257827021181583404541015625
Однако вы могли заметить, что при запросе напечатать 0,1
Python печатает 0,1
, а не приближенное значение, указанное выше:
Python не просто обрезает цифры в двоичном представлении для 0.1
. То, что происходит на самом деле, немного более тонкое.
Поскольку приближение 0,1
в двоичном формате — это всего лишь приближение, вполне возможно, что более одного десятичного числа имеют одинаковое двоичное приближение.
Например, 0,1
и 0,10000000000000001
имеют одинаковое двоичное приближение. Python выводит кратчайшее десятичное число, которое разделяет приближение.
Это объясняет, почему в первом примере этого раздела 0.1 + 0,2
не равно 0,3
. Python складывает двоичные приближения для 0,1
и 0,2
, что дает число, равное , а не двоичное приближение для 0,3
.
Если от всего этого начинает кружиться голова, не волнуйтесь! Если вы не пишете программы для финансов или научных вычислений, вам не нужно беспокоиться о неточности арифметики с плавающей запятой.
Математические функции и числовые методы
Python имеет несколько встроенных функций, которые можно использовать для работы с числами.В этом разделе вы узнаете о трех наиболее распространенных:
-
round ()
, для округления чисел до некоторого числа десятичных знаков -
abs ()
, для получения абсолютного значения числа -
pow ()
, для возведения числа в некоторую степень
Вы также узнаете о методе, который можно использовать с числами с плавающей запятой, чтобы проверить, имеют ли они целочисленное значение.
круглые числа с
круглыми ()
Вы можете использовать round ()
для округления числа до ближайшего целого:
>>> круглый (2.3)
2
>>> круглый (2.7)
3
round ()
имеет неожиданное поведение, когда число заканчивается на ,5
:
>>> круглый (2,5)
2
>>> круглый (3,5)
4
2,5
округляется до 2
, а 3,5
округляется до 4
. Большинство людей ожидают, что число, оканчивающееся на ,5
, будет округлено в большую сторону, поэтому давайте подробнее рассмотрим, что здесь происходит.
Python 3 округляет числа в соответствии со стратегией, называемой округлением связей до четных.Связка — это любое число, последняя цифра которого равна пяти. 2,5
и 3,1415
являются связями, а 1,37
— нет.
Когда вы округляете связи до четного, вы сначала смотрите на цифру, равную одному десятичному знаку, слева от последней цифры в галстуке. Если эта цифра четная, вы округлите ее в меньшую сторону. Если цифра нечетная, округлите в большую сторону. Поэтому 2,5
округляется до 2
и 3,5
округляется до 4
.
Примечание. Округление связей до четного — это стратегия округления, рекомендованная для чисел с плавающей запятой IEEE (Институт инженеров по электротехнике и электронике), поскольку она помогает ограничить влияние округления на операции с большим количеством чисел.
IEEE поддерживает стандарт под названием IEEE 754 для работы с числами с плавающей запятой на компьютере. Он был опубликован в 1985 году и до сих пор широко используется производителями оборудования.
Вы можете округлить число до заданного количества десятичных знаков, передав второй аргумент функции round ()
:
>>> круглый (3,14159, 3)
3,142
>>> круглый (2.71828, 2)
2,72
Число 3,14159
округляем до трех десятичных знаков, чтобы получить 3.142
, а число 2,71828
округляется до двух десятичных знаков, чтобы получить 2,72
.
Второй аргумент round ()
должен быть целым числом. Если это не так, Python вызывает ошибку TypeError
:
>>> круглый (2,65, 1,4)
Отслеживание (последний вызов последний):
Файл "", строка 1, в
круглый (2,65, 1,4)
TypeError: объект float нельзя интерпретировать как целое число
Иногда round ()
не дает правильного ответа:
>>> # Ожидаемое значение: 2.68
>>> круглый (2,675, 2)
2,67
2,675
— это ничья, потому что оно находится ровно посередине между числами 2,67
и 2,68
. Поскольку Python округляет связи до ближайшего четного числа, можно ожидать, что round (2,675, 2)
вернет 2,68
, но вместо этого он вернет 2,67
. Эта ошибка является результатом ошибки представления с плавающей запятой, а не ошибки в round ()
.
Работа с числами с плавающей запятой может вызывать разочарование, но это разочарование не характерно для Python.Все языки, реализующие стандарт с плавающей запятой IEEE, имеют одни и те же проблемы, включая C / C ++, Java и JavaScript.
Однако в большинстве случаев небольшие ошибки, встречающиеся с числами с плавающей запятой, незначительны, и результаты round ()
совершенно полезны.
Найдите абсолютное значение с помощью
abs ()
Абсолютное значение числа n равно n , если n положительно, и — n , если n отрицательно.Например, абсолютное значение 3
равно 3
, а абсолютное значение -5
равно 5
.
Чтобы получить абсолютное значение числа в Python, вы используете abs ()
:
>>> абс (3)
3
>>> абс (-5,0)
5.0
abs ()
всегда возвращает положительное число того же типа, что и его аргумент. То есть абсолютное значение целого числа всегда является положительным целым числом, а абсолютное значение числа с плавающей запятой всегда является положительным числом с плавающей запятой.
Повышение мощности с помощью
pow ()
Ранее вы узнали, как возвести число в степень с помощью оператора **
. Вы также можете использовать pow ()
для достижения того же результата.
pow ()
принимает два аргумента. Первый аргумент — это основание или число, которое нужно возвести в степень, а вторым аргументом является показатель степени или степень, до которой число должно быть возведено в степень.
Например, следующий код использует pow ()
для возведения 2
в степень 3
:
Как и в случае **
, показатель степени в pow ()
может быть отрицательным:
Итак, в чем разница между **
и pow ()
?
Функция pow ()
принимает необязательный третий аргумент, который вычисляет первое число, возведенное в степень второго числа, а затем берет модуль по отношению к третьему числу.Другими словами, pow (x, y, z)
эквивалентно (x ** y)% z
.
Вот пример, в котором x = 2
, y = 3
и z = 2
:
Сначала 2
возводится в степень 3
, чтобы получить 8
. Затем вычисляется 8% 2
, что составляет 0
, потому что 2
делит 8
без остатка.
Проверить, встроен ли поплавок
Возможно, вы знакомы со строковыми методами, такими как .lower ()
, .upper ()
и .find ()
. Целые числа и числа с плавающей запятой также имеют методы.
Числовые методы используются нечасто, но есть один, который может быть полезен. Числа с плавающей запятой имеют метод .is_integer ()
, который возвращает Истинно
, если число является целым — это означает, что у него нет дробной части — и в противном случае возвращает Ложь
:
>>> число = 2,5
>>> num.is_integer ()
Ложь
>>> число = 2.0
>>> num.is_integer ()
Правда
Одно из применений .is_integer ()
— для проверки пользовательского ввода. Например, если вы пишете приложение для онлайн-заказа пиццерии, вам нужно проверить, является ли количество пицц, вводимых клиентом, целым числом.
Функции round (),
, abs (),
и pow ()
являются встроенными функциями, то есть вам не нужно ничего импортировать, чтобы использовать их. Но эти три функции едва касаются всех функций, доступных для работы с числами в Python.
Чтобы получить еще больше математических удовольствий, ознакомьтесь с математическим модулем Python: все, что вам нужно знать!
Проверьте свое понимание
Разверните блок ниже, чтобы проверить свое понимание:
Напишите программу, которая просит пользователя ввести число, а затем отображает это число, округленное до двух десятичных знаков. При запуске ваша программа должна выглядеть так:
Введите число: 5,432
5,432 с округлением до 2 знаков после запятой составляет 5,43
Вы можете развернуть блок ниже, чтобы увидеть решение:
Чтобы получить ввод от пользователя, передайте запрос input ()
:
user_input = input («Введите число:»)
Обратите внимание на пробел в конце строки приглашения.Это гарантирует, что между текстом, введенным пользователем, когда он начинает печатать, и двоеточием в приглашении будет пробел.
Значение, возвращаемое функцией input ()
, является строкой, поэтому перед округлением числа необходимо преобразовать его в число с плавающей запятой:
Имейте в виду, что приведенный выше код предполагает, что строка user_input
действительно содержит числовое значение, а не какой-либо другой текст.
Примечание: Если user_input
действительно содержит нечисловой текст, то будет вызвана ошибка ValueError
.Ознакомьтесь с исключениями Python: Введение для получения информации о том, как обрабатывать такие типы ошибок.
Теперь вы можете использовать round ()
для округления значения до двух десятичных знаков:
округленное_число = круглое (число; 2)
Помните, что первым аргументом функции round ()
должно быть число, которое нужно округлить. Второй аргумент — это количество десятичных знаков, до которых нужно округлить.
Наконец, вы можете распечатать вывод, вставив rounded_num
в строку f:
print (f "{число} с округлением до 2 десятичных знаков равно {округленное_число}")
round ()
— отличный способ округления значений, но если вы округляете только значения для их отображения, то вы можете рассмотреть возможность использования методов, описанных в следующем разделе.
Когда будете готовы, можете переходить к следующему разделу.
Печать чисел в стиле
Для отображения чисел пользователю необходимо вставить числа в строку. Вы можете сделать это с помощью f-строк, заключив переменную, присвоенную номеру, фигурными скобками:
>>> >>> п = 7,125
>>> f "Значение n равно {n}"
"Значение n равно 7,125"
Эти фигурные скобки поддерживают простой язык форматирования, который можно использовать для изменения внешнего вида значения в окончательной отформатированной строке.
Например, чтобы отформатировать значение n
в приведенном выше примере до двух десятичных знаков, замените содержимое фигурных скобок в строке f на {n: .2f}
:
>>> п = 7,125
>>> f "Значение n равно {n: .2f}"
"Значение n равно 7,12"
Двоеточие (:
) после переменной n
указывает, что все, что находится после него, является частью спецификации форматирования. В этом примере спецификация форматирования — .2f
.
.2
в .2f
округляет число до двух десятичных знаков, а f
указывает Python отображать n
как число с фиксированной точкой . Это означает, что число отображается ровно с двумя десятичными знаками, даже если исходное число имеет меньше десятичных знаков.
Когда n = 7,125
, результат {n: .2f}
будет 7,12
. Как и в случае с round ()
, Python округляет связи даже при форматировании чисел внутри строк.Итак, если вы замените n = 7,125
на n = 7,126
, то результатом {n: .2f}
будет 7,13
:
>>> п = 7,126
>>> f "Значение n равно {n: .2f}"
«Значение n равно 7,13».
Чтобы округлить до одного десятичного знака, замените ,2
на ,1
:
>>> п = 7,126
>>> f "Значение n равно {n: .1f}"
"Значение n равно 7,1"
Когда вы форматируете число как фиксированную точку, оно всегда отображается с указанным вами точным количеством десятичных знаков:
>>> >>> п = 1
>>> f "Значение n равно {n :.2f} "
"Значение n равно 1.00"
>>> f "Значение n равно {n: .3f}"
"Значение n равно 1.000"
Вы можете вставлять запятые, чтобы сгруппировать целую часть больших чисел по тысячам с помощью опции ,
:
>>> п = 1234567890
>>> f "Значение n равно {n :,}"
'Значение n равно 1,234,567,890'
Чтобы округлить до некоторого числа десятичных знаков, а также сгруппировать по тысячам, поместите ,
перед .
в вашей спецификации форматирования:
>>> п = 1234,56
>>> f "Значение n равно {n:,. 2f}"
"Значение n равно 1234,56".
Спецификатор , .2f
полезен для отображения значений валюты:
>>> баланс = 2000,0
>>> потрачено = 256,35
>>> остаток = баланс - потрачено
>>> f "Потратив $ {потрачено: .2f}, у меня осталось $ {осталось:,. 2f}"
«Потратив 256 долларов.35 лет, у меня осталось 1743,65 доллара '
Еще одна полезная опция — %
, которая используется для отображения процентов. Параметр %
умножает число на 100
и отображает его в формате с фиксированной точкой, за которым следует знак процента.
Параметр %
всегда должен стоять в конце спецификации форматирования, и его нельзя смешивать с параметром f
. Например, .1%
отображает число в процентах с точностью до одного десятичного знака:
>>> ratio = 0.9
>>> f "Более {ratio: .1%} питонистов говорят:" Настоящий питон - это круто! ""
«Более 90,0% питонистов говорят:« Настоящий питон - это круто! »»
>>> # Отображение процента с двумя десятичными знаками
>>> f "Более {ratio: .2%} питонистов говорят:" Настоящий питон - скала! ""
«Более 90,00% питонистов говорят:« Настоящий питон крут! »»
Мини-язык форматирования является мощным и обширным. Вы видели здесь только основы. Для получения дополнительной информации ознакомьтесь с официальной документацией.
Проверьте свое понимание
Разверните блок ниже, чтобы проверить свое понимание:
Выведите число 150000
в виде валюты с тысячами, сгруппированными через запятую.Валюта должна отображаться с двумя десятичными знаками и начинаться с символа доллара США.
Вы можете развернуть блок ниже, чтобы увидеть решение:
Давайте постепенно наращиваем нашу фа-струну.
Во-первых, f-строка, которая отображает значение 150000
без какого-либо форматирования, выглядит так:
>>> f "{150000}"
150000
Это может показаться странным, но требует добавления спецификаторов форматирования.
Чтобы значение отображалось как число с плавающей запятой, поставьте двоеточие (:
) после числа 150000
, а затем букву f
:
>>> f "{150000: f}"
"150000.000000"
По умолчанию Python отображает число с шестью десятичными знаками точности. Валюта должна иметь только два десятичных знака точности, поэтому вы можете добавить ,2
между :
и f
:
>>> f "{150000 :.2f} "
"150000.00"
Для отображения числа с цифрами, сгруппированными запятыми, вставьте запятую (,
) между двоеточием (:
) и точкой (.
):
>>> f "{150000:,. 2f}"
"150,000.00"
Наконец, добавьте знак доллара ( $
) в начало строки, чтобы указать, что значение указано в долларах США:
>>> f "$ {150000:,. 2f}"
"150 000 долларов США"
F-строки — это всего лишь один из способов форматирования чисел для отображения.Ознакомьтесь с Руководством по новым методам форматирования строк Python, чтобы узнать о других способах форматирования чисел и другого текста в Python.
Когда будете готовы, можете переходить к следующему разделу.
Комплексные числа
Python — один из немногих языков программирования, который обеспечивает встроенную поддержку комплексных чисел. Хотя комплексные числа не часто встречаются за пределами областей научных вычислений и компьютерной графики, их поддержка Python является одной из его сильных сторон.
Если вы когда-либо посещали уроки предварительного вычисления или алгебры более высокого уровня, то, возможно, помните, что комплексное число — это число с двумя отдельными компонентами: действительная часть и мнимая часть .
Чтобы создать комплексное число в Python, вы просто пишете действительную часть, затем знак плюс, затем мнимую часть с буквой j в конце:
Когда вы проверите значение n
, вы заметите, что Python заключает число в круглые скобки:
Это соглашение помогает избежать путаницы в том, что отображаемый результат может представлять собой строку или математическое выражение.
Мнимые числа имеют два свойства: .real
и .imag
, которые возвращают действительную и мнимую составляющие числа соответственно:
>>> п.реально
1.0
>>> n.imag
2.0
Обратите внимание, что Python возвращает и действительные, и мнимые компоненты как числа с плавающей запятой, даже если они были указаны как целые числа.
Комплексные числа также имеют метод .conjugate ()
, который возвращает комплексное сопряжение числа:
>>> п.сопрягать ()
(1-2j)
Для любого комплексного числа его сопряженное число является комплексным числом с одинаковой действительной частью и мнимой частью, которая одинакова по модулю, но с противоположным знаком. Итак, в этом случае комплексное сопряжение 1 + 2j
равно 1 - 2j
.
Свойства .real
и .imag
не нуждаются в скобках после них, как это делает .conjugate ()
.
Метод .conjugate ()
— это функция, которая выполняет действие над комплексным числом, тогда как .реальные
и .imag
не выполняют никаких действий — они просто возвращают некоторую информацию о номере.
Различие между методами и свойствами — важный аспект объектно-ориентированного программирования.
За исключением оператора деления пола ( //
), все арифметические операторы, работающие с числами с плавающей запятой и целыми числами, также будут работать с комплексными числами. Поскольку это не углубленный курс математики, мы не будем обсуждать механику сложной арифметики.Вместо этого вот несколько примеров использования комплексных чисел с арифметическими операторами:
>>> a = 1 + 2j
>>> b = 3 - 4j
>>> а + б
(4-2j)
>>> а - б
(-2 + 6j)
>>> а * б
(11 + 2j)
>>> а ** б
(932.13432212 + 95.9465336603415j)
>>> а / б
(-0,2 + 0,4j)
>>> а // б
Отслеживание (последний вызов последний):
Файл "", строка 1, в
TypeError: невозможно принять комплексное число.
Интересно, хотя и не удивительно с математической точки зрения, объекты int
и float
также имеют .real
и .imag
, а также метод .conjugate ()
:
>>> х = 42
>>> x.real
42
>>> x.imag
0
>>> x.conjugate ()
42
>>> у = 3,14
>>> y.real
3,14
>>> y.imag
0,0
>>> y.conjugate ()
3,14
Для чисел с плавающей запятой и целых чисел .real
и .conjugate ()
всегда возвращают само число, а .imag
всегда возвращает 0
.Однако следует отметить, что n.real
и n.imag
возвращают целое число, если n
является целым числом, и число с плавающей запятой, если n
является числом с плавающей запятой.
Теперь, когда вы познакомились с основами комплексных чисел, вы можете задаться вопросом, когда вам когда-нибудь понадобится их использовать. Если вы изучаете Python для веб-разработки, анализа данных или программирования общего назначения, правда в том, что вам может никогда не понадобиться использовать комплексные числа.
С другой стороны, комплексные числа важны в таких областях, как научные вычисления и компьютерная графика.Если вы когда-либо работали в этих областях, вам может пригодиться встроенная в Python поддержка комплексных чисел.
Заключение: числа в Python
В этом руководстве вы узнали все о работе с числами в Python. Вы видели, что существует два основных типа чисел — целые числа и числа с плавающей запятой, и что Python также имеет встроенную поддержку комплексных чисел.
В этом руководстве вы узнали:
- Как выполнять простую арифметику с числами с помощью арифметических операторов Python
- Как написать арифметических выражений с использованием передового опыта PEP 8
- Что такое числа с плавающей запятой и почему они не всегда могут быть точными на 100 процентов
- Как круглые числа с
круглые ()
- Что такое комплексных чисел и как они поддерживаются в Python
Независимо от вашего уровня комфорта с числами и математикой, теперь вы готовы выполнять все виды вычислений в своем коде Python.