Какие формы записи используются в компьютерных технологиях для кодирования целых чисел со знаком

Обновлено: 03.07.2024

В десятичной системе для представления дробей может использоваться десятичная точка, например 6,5 или 24,29. Один из способов кодирования дробей использует точно такой же метод в двоичных числах: вставляется «двоичная точка».

К битам после двоичной точки применяются весовые коэффициенты при чтении слева направо, 1/2, 1/4, 1/8 и т. д. (точно так же, как и в десятичных дробях, они равны 1 /10, 1/100 и т. д.).

Теперь 1/4 совпадает с 1/2 2 , а 1/8 совпадает с 1/2 3 , и для таких дробей существует удобное обозначение, которое заключается в записи 1/2 2 как 2 −2, 1/2 3 как 2 3 и так далее. Другими словами, отрицательный знак в показателе степени указывает на дробь.

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

Так, например, 0,010·1000 в двоичном формате равно 1/4 + 1/16 = 5/16 (или 0,25 + 0,0625 = 0,3125) в десятичной системе.

К счастью, эта проблема точного представления не возникает в примере с кухонными весами. В рецептах, использующих имперские веса, традиционно используются 1/2 унции, 1/4 унции и т. д., и это дроби, которые могут быть точно представлены только что описанным представлением с фиксированной точкой.

Вставка 3. Представление с плавающей запятой

Еще один способ представления двоичных дробей — представление с плавающей запятой. Это предпочтительный метод во многих приложениях, поскольку он очень гибкий, хотя и довольно сложный. Он использует ту же основную идею, что и дробь с фиксированной точкой, но с переменным масштабным коэффициентом. Две группы битов используются для представления одной величины. Первая группа, называемая мантисса, содержит значение двоичной дроби с фиксированной запятой, где двоичная точка находится в некоторой предопределенной позиции, например, после старшего бита. Вторая группа, называемая показателем степени, содержит целое число, являющееся коэффициентом масштабирования.

Примером может служить мантисса 0,111 1000, которая дает дробь с фиксированной точкой 1/2 + 1/4 + 1/8 + 1/16 = 15/16, вместе с показателем степени 0000 0011, который оценивает до десятичного целого числа 3. Но какую дробь представляет эта пара мантисса-показатель?

Ответ заключается в том, что он представляет (мантисса × 2 показатель степени ), что равно 15/16 × 2 3 . Получается 15/16 × 8, то есть 7,5.

Другим примером является мантисса 0,011 0000 и показатель степени 0000 0001. Здесь мантисса оценивается как 1/2 + 1/8, что составляет 3/8. Показатель степени равен 1. Таким образом, представленная здесь дробь равна 3/8 × 2 1 . Получается 3/8 × 2, то есть 3/4.

Обратите внимание, что дробь, представленная в первом примере, является «смешанной дробью», то есть смесью целого числа и дроби, которая меньше 1, в то время как во втором примере представленная дробь просто меньше, чем 1. Эта возможность представлять дроби обоих типов с помощью одинаковых методов кодирования делает представление с плавающей запятой чрезвычайно универсальным.

Дополнение до двух

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

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

Предположим, что мы работаем с 8-битными величинами (для простоты) и предположим, что мы хотим найти, как -28 будет выражено в виде дополнения до двух. Сначала мы записываем 28 в двоичной форме.

Затем мы инвертируем цифры. 0 становится 1, 1 становится 0.

Вот как можно записать -28 в 8-битном двоичном коде.

Конверсия из дополнения до двух

В качестве примера используйте число 0xFFFFFFFF. В двоичном формате, то есть:

Что мы можем сказать об этом числе? Его первый (самый левый) бит равен 1, что означает, что он представляет отрицательное число. Точно так же обстоят дела и в дополнении до двух: ведущая 1 означает, что число отрицательное, начальный 0 означает, что число 0 или положительное.

Чтобы увидеть отрицательное значение этого числа, мы меняем знак этого числа. Но как это сделать? В примечаниях к классу сказано (к 3.17), что для изменения знака нужно просто инвертировать биты (0 становится равным 1, а 1 равен 0) и прибавляется единица к полученному числу.

Очевидно, что инверсия этого двоичного числа:

Затем мы добавляем один.

Поэтому отрицательное значение 0xFFFFFFFF равно 0x00000001, более известному как 1. Таким образом, 0xFFFFFFFF равно -1.

Преобразование в дополнение до двух

Обратите внимание, что это работает в обе стороны. Если у вас есть -30 и вы хотите представить его в дополнении до 2, вы берете двоичное представление 30:

Инвертируйте цифры.

В обратном преобразовании в шестнадцатеричный формат это 0xFFFFFFFE2. И действительно, предположим, что у вас есть этот код:

Это должно дать результат -30. Попробуйте, если хотите.

Арифметика с дополнением до двух

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

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

Пример 1

Предположим, мы хотим сложить два числа 69 и 12 вместе. Если мы будем использовать десятичное число, мы увидим, что сумма равна 81. Но давайте вместо этого будем использовать двоичное число, так как его использует компьютер.

Carry Row
(69)
(12)
(81)

Пример 2

Теперь предположим, что мы хотим вычесть 12 из 69. Итак, 69 - 12 = 69 + (-12). Чтобы получить отрицательное число 12, мы берем его двоичное представление, инвертируем и добавляем единицу.

Инвертируйте цифры.

Последнее — это двоичное представление для -12. Как и прежде, мы сложим два числа вместе.

Carry Row
(69)
(-12)< /TD>
(57)

В результате получается 57, то есть 69-12.

Пример 3

Наконец, мы вычтем 69 из 12. Аналогично нашей операции в примере 2, 12 - 69 = 12 + (- 69). Дополнение до двух представляет число 69 следующим образом. Я полагаю, у вас было достаточно примеров инвертирования и добавления единицы.

Поэтому мы добавляем это число к 12.

Carry Row
(12)
(-69)< /TD>
(-57)

В результате получается 12 - 69 = -57, что верно.

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

Инвертировать и добавить единицу. Инвертируйте и добавьте один. Это работает, и вы можете захотеть узнать, почему. Если вам все равно, пропустите это, так как это вряд ли необходимо. Это предназначено только для тех, кому интересно, почему этот довольно странный метод на самом деле имеет математический смысл.

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

Заимствование и вычитание

Помните старый трюк, которому мы научились в первом классе: "заимствование" из будущих десятков для выполнения вычитания? Вы не можете, поэтому я пройдусь по этому. В качестве примера я сделаю 93702 минус 58358.

Итак, каков ответ на это вычисление? Мы начнем с младшей значащей цифры и будем вычитать почленно. Мы не можем вычесть 8 из 2, поэтому мы позаимствуем цифру из следующего по значимости разряда (десятки), чтобы получить 12 минус 8. 12 минус 8 равно 4, и мы отмечаем 1 цифру над столбцом десятков. чтобы показать, что мы должны помнить о вычитании на единицу на следующей итерации.

Следующая итерация — это 0 минус 5 и минус 1, или 0 минус 6. Опять же, мы не можем сделать 0 минус 6, поэтому мы еще раз заимствуем следующую по значимости цифру, чтобы получить 10 минус 6, что равно 4.

Следующая итерация равна 7 минус 3 и минус 1, или 7 минус 4. Это 3. На этот раз нам не нужно брать взаймы.

Следующая итерация равна 3 минус 8. Опять же, мы должны заимствовать, чтобы получить 13 минус 8 или 5.

Следующая итерация равна 9 минус 5 и минус 1, или 9 минус 6. Это 3. На этот раз нам не нужно брать взаймы.

Таким образом, 93702 минус 58358 равно 35344.

Заимствование и его отношение к отрицательному числу

Если вы хотите найти отрицательное число, вы берете число и вычитаете его из нуля. Теперь предположим, что мы действительно глупы, как компьютер, и вместо того, чтобы просто писать знак минус перед числом А, когда мы вычитаем А из 0, мы на самом деле выполняем шаги вычитания А из 0.

Возьмите следующее идиотское вычисление 0 минус 3:

И так далее, и так далее. Мы получили бы число, состоящее из 7 в разряде единиц и 9 в каждом разряде, более значимом, чем разряд 10 0.

То же самое в двоичном формате

Мы можем сделать примерно то же самое с двоичным кодом. В этом примере я использую 8-битные двоичные числа, но принцип одинаков как для 8-битных двоичных чисел (chars), так и для 32-битных двоичных чисел (ints). Я беру число 75 (в 8-битном двоичном коде, то есть 01001011 2 ) и вычитаю его из нуля.

Иногда я оказываюсь в ситуации, когда я вычитаю 1 из нуля, а также вычитаю из него еще одну заимствованную 1.

Если бы мы хотели, мы могли бы пойти дальше, но в этом не было бы смысла. Внутри компьютера результат этого вычисления будет присвоен восьмибитной переменной, поэтому все биты, кроме восьмого, будут отброшены.

Учитывая тот факт, что мы просто проигнорируем любые лишние цифры, какая разница в конечном результате, если из 100000000 (один бит, за которым следуют 8 нулевых битов) будет вычтено 01001011, а не 0? Здесь ничего нет. Если мы это сделаем, то получим тот же результат:

Итак, чтобы найти отрицательное значение n-битного числа на компьютере, вычтите число из 0 или вычтите его из 2 n . В двоичном формате эта степень двойки будет представлять собой один бит, за которым следуют n нулевых битов.

В двоичном формате, когда мы вычитаем число A из числа, состоящего только из единиц, мы инвертируем биты числа A. Таким образом, операция вычитания эквивалентна инвертированию битов числа. Затем мы добавляем один.

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

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

Наши редакторы рассмотрят то, что вы отправили, и решат, нужно ли пересматривать статью.

двоичный код, код, используемый в цифровых компьютерах, основанный на двоичной системе счисления, в которой есть только два возможных состояния, выключено и включено, обычно обозначаемое 0 и 1. В то время как в десятичной системе, использующей 10 цифр, каждое позиция цифры представляет степень числа 10 (100, 1000 и т. д.), в двоичной системе каждая позиция цифры представляет степень числа 2 (4, 8, 16 и т. д.). Двоичный кодовый сигнал представляет собой серию электрических импульсов, которые представляют собой числа, символы и операции, которые необходимо выполнить. Устройство, называемое часами, посылает регулярные импульсы, а такие компоненты, как транзисторы, включаются (1) или выключаются (0), чтобы пропускать или блокировать импульсы. В двоичном коде каждое десятичное число (0–9) представлено набором из четырех двоичных цифр или битов. Четыре основные арифметические операции (сложение, вычитание, умножение и деление) могут быть сведены к комбинациям основных булевых алгебраических операций над двоичными числами. (См. в таблице ниже показано, как десятичные числа от 0 до 10 представлены в двоичном формате.)

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

Редакторы Британской энциклопедии Эта статья была недавно отредактирована и обновлена ​​Адамом Августином.

Вот своего рода глоссарий компьютерных модных словечек, с которыми вы столкнетесь при использовании компьютера:

Бит
Компьютерные процессоры могут только сказать, включен провод или нет. К счастью, они могут просматривать множество проводов одновременно (см. шину) и довольно изощренно реагировать на сложную последовательность включений и отключений. Чтобы преобразовать эти шаблоны во что-то, что имеет смысл для людей, мы рассматриваем подключенный провод как «1», а отключенный провод как «0». Затем мы можем посмотреть на провода, ведущие к компьютеру, и прочитать что-то вроде 00110111 00010000. Мы не знаем, что это представляет для процессора, это просто шаблон. Каждое место в шаблоне — это бит, который может быть равен 1 или 0. Если это означает число для процессора, биты составляют двоичное число.

Двоичные числа
В наши дни большинство из нас считает десятками. В древних культурах считали 5, 12 или 24, но за последнюю тысячу лет счет десятками стал нормой. когда вы видите число 145, вы просто знаете, что оно включает в себя одну группу из десяти десятков, плюс четыре группы из десяти и еще пять. Десять десятков это сто или десять в квадрате. Десять сотен — это тысяча, или десять в третьей. Здесь есть закономерность. Каждая цифра представляет собой количество десятков, возведенное в степень положения цифры, при условии, что вы начинаете счет с нуля и считаете справа налево.

Если вы проделаете то же самое с битами, которые могут быть только 1 или 0, каждая позиция в списке битов представляет некоторую степень двойки. 1001 означает одна восьмерка плюс ни одной четверки плюс ни одной двойки плюс еще одна. Это называется двоичной записью. Вы можете преобразовывать числа из двоичной записи в десятичную, но это требуется редко.

Байты
Числа вроде 00110111 10110000 намного легче читать, если вы ставите пробелы через каждые 8 ​​бит. В десятичном представлении мы используем запятые через каждые три цифры по той же причине. В 8 битах нет ничего особенного, просто так все началось.Фурнитура проще собрать, если вы сгруппируете провода последовательно от одной части к другой. Некоторое старое оборудование группировало провода по 10, но в 70-х идея работы группами по 8 действительно преобладала, особенно при разработке интегральных схем. Кто-то пошутил о группе, переносящей байт данных, и термин прижился. Иногда можно услышать группу из четырех битов, называемую полубайтом.

Самое большое число, которое можно представить с помощью 8 бит, — 1 111 1111, или 255 в десятичной системе счисления. Поскольку 00000000 является наименьшим, вы можете представить 256 элементов с помощью байта. (Помните, укус — это просто шаблон. Он может представлять собой букву или оттенок зеленого.) Биты в байте имеют числа. Крайний правый бит — это бит 0, а левый — бит 7. Эти два бита также имеют имена. Самый правый - это младший значащий бит или младший бит. Он наименее значим, потому что его изменение оказывает наименьшее влияние на значение. Какой мсб? (Байты в больших числах также можно назвать наименее значимыми и наиболее значимыми.)

Шестнадцатеричные числа
Даже с пробелом 00110111 10110000 довольно сложно прочитать. Разработчики программного обеспечения часто используют код, называемый шестнадцатеричным, для представления двоичных шаблонов. Шестнадцатеричная система была создана путем преобразования десятичной системы счисления в двоичную и наоборот. Кто-то добавил шесть цифр к обычным числам от 0 до 9, чтобы число до 15 можно было представить одним символом. Поскольку их нужно было набирать на обычной клавиатуре, использовались буквы A-F. Один из них может представлять собой четыре бита, поэтому байт записывается в виде двух шестнадцатеричных цифр. 00110111 10110000 становится 37B0.

Вот удобная таблица:
Шестнадцатеричный двоичный десятичный
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
А 1010 10
Б 1011 11 < br />C 1100 12
D 1101 13
E 1110 14
F 1111 15

При использовании трех разных схем легко спутать числа. 1000 можно перевести как тысяча, восемь или четыре тысячи девяносто шесть. Вы должны указать, какую систему вы используете. Тот факт, что вы все еще иногда видите устаревшую систему, называемую восьмеричной (цифры 0-7. Вы можете это понять), увеличивает вероятность путаницы. Шестнадцатеричные числа можно указать, написав их 1000hex 1000h или 0x1000. Двоичные числа можно записать 1000bin. Восьмеричные числа были просто записаны с дополнительным ведущим 0. Десятичные числа не указываются, за исключением случаев, когда есть вероятность путаницы, например, один на странице шестнадцатеричных чисел.

Шина
В электрических системах провод, соединяющий более двух устройств, называется шиной. Обычно у вас есть шина питания, которая подает ток на все части, которые в нем нуждаются, и шина заземления, которая возвращает ток к источнику питания. (Все текущие пути должны быть двусторонними.)

В компьютерной инженерии понятие шины было расширено до обозначения группы проводов, по которым передаются данные по системе. Обычно проводов достаточно для обработки от одного до четырех байтов. Размер этих шин оказывает большое влияние на эффективность системы. 32-битная шина может обрабатывать числа в два раза длиннее (то есть от 2 до 16 больше), чем 16-битная шина.

Последовательные данные
Вы можете отправлять большие числа по узкой шине, если отправляете их порциями. Если у вас восьмибитная шина, вы можете отправлять байты один за другим, а процессор может складывать байты вместе. Это может быть отключено с помощью одной проводной шины. Затем биты поступают по одному — это называется последовательной передачей данных.

Память
Компьютер был бы бесполезен, если бы не мог хранить данные. За прошедшие годы было много схем для хранения данных, но то, как это делается сегодня, включает в себя подключение транзисторов, чтобы они оставались включенными, когда они включены, и оставались выключенными, когда выключались. Затем транзистор может хранить бит. Транзисторы организованы в группы по 8, поэтому каждая группа может хранить байт. В одной интегральной схеме могут быть миллионы таких групп.

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

Такой тип памяти называется оперативной памятью для оперативной памяти. Поскольку транзисторы должны оставаться включенными, все данные удаляются при отключении питания. Некоторые компьютеры могут сохранить память, никогда не выключаясь. У них есть батарея, обеспечивающая достаточно энергии для транзисторов памяти, о которых они не забывают.

Еще один тип памяти называется ПЗУ и предназначен для чтения только для чтения. Существуют различные типы этого, но наиболее распространенным является набор предохранителей.Все, что сгорело, представляет собой 0. Ничто не может изменить то, что находится в постоянной памяти, поэтому любая программа или данные в ней доступны, как только компьютер включен.

Диски
Поскольку память очищается при отключении питания, должна быть какая-то механическая система для хранения данных между заданиями. Носитель, используемый для хранения данных, может варьироваться от магнитной ленты до оптических дисков, а некоторые устройства позволяют легко извлекать и заменять носитель. В большинстве этих систем хранения данных используются какие-либо вращающиеся диски. Существует сложная схема отслеживания данных на диске: байты сгруппированы в блоки, блоки в файлы, файлы в каталоги (или папки), а каталоги в разделы (или тома). Пользователь вообще видит только файлы и выше.
Центральный процессор
Центральный процессор или центральный процессор — это сердце компьютера. ЦП считывает инструкцию из памяти (инструкции представляют собой битовые комбинации, как и все остальное), выполняет ее и ищет следующую инструкцию. Инструкции — это простые вещи, такие как копирование значения из памяти. ЦП имеет свои собственные ячейки памяти, называемые регистрами. Специальное оборудование позволяет складывать или вычитать регистры друг из друга. Чтобы сложить два числа, ЦП должен выбрать первое число и поместить его в регистр, выбрать другое число и поместить его в другой регистр, сложить два регистра и поместить результат обратно в память. Каждая из этих операций требует инструкции.
Часы
К счастью, ЦП может делать все это очень быстро. Вся операция управляется схемой генератора, называемой системными часами, которая работает с частотой в миллионы герц (циклов в секунду). Было бы просто думать, что один тактовый цикл означает одну инструкцию, но инструкции различаются по сложности и занимают от 4 до 20 циклов. Операции еще больше замедляются из-за памяти, которая не справляется. Некоторые ЦП имеют сверхскоростную память, называемую кешем, в которой числа, которые необходимы часто, могут храниться и извлекаться быстрее.

Периферийные устройства
ЦП взаимодействует с памятью через адресную шину и шину данных. Для связи с остальным миром используются другие автобусы. (Места, к которым могут подключаться внешние устройства, иногда называют портами.) Эти шины могут быть общими или подсоединены к одному устройству. Они могут быть последовательными или многопроводными, называемыми параллельными. Устройства, подключенные к системе, называются периферийными устройствами; сюда входят клавиатуры, мониторы, мыши, графические планшеты, принтеры, MIDI-системы и многое другое. Каждый из них имеет свои собственные данные и электрические характеристики, но соединение в порту должно быть достаточно стандартизировано, чтобы обеспечить взаимозаменяемость подобных устройств. Ниже приведены виды соединений, используемые в различных системах.

Параллельный порт
Это старый стандарт, изначально разработанный для принтеров, поэтому его часто называют портом принтера, хотя сюда можно подключать другие вещи и принтеры можно подключать другими способами. Что касается портов данных, этот довольно медленный.
IDE/ATA
Это параллельная шина, предназначенная для устройств хранения больших объемов данных. Обычно он спрятан внутри коробки, так как используемые разъемы не очень прочные. В шине IDE есть провода, которые выбирают, какое устройство активно, поэтому логическое расположение устройства (диск A, B и т. д.) зависит от того, к какому разъему оно подключено.

SCSI
Это еще один тип параллельной шины для хранения больших объемов данных. Механически он намного прочнее, чем IDE, поэтому его часто используют между коробками. SCSI — это развивающийся стандарт, который периодически адаптируется для работы на более высоких скоростях. SCSI поддерживает семь устройств на шине, и каждое из них должно иметь уникальный идентификационный номер, установленный на задней панели.

SVGA
Это тип видеоразъема. Это один из многих, но сейчас самый распространенный.

Коммуникационный порт
Это тип последовательного порта, который существует уже несколько десятилетий. Другое его название — RS-232, название технического документа, описывающего, как это должно работать. Это самый медленный порт из всех. Сюда подключаются только очень простые устройства.

Модем
К последовательному порту часто подключается модем, представляющий собой коробку, преобразующую данные в тональные сигналы, которые можно передавать по телефону. Во многих случаях модем встроен в компьютер, поэтому модемное соединение идет прямо к телефонной линии.

Ethernet
Существует множество систем, предназначенных для соединения компьютеров друг с другом. Ethernet является одним из самых популярных, потому что его очень быстро и относительно дешево построить. Компьютеры не подключаются напрямую друг к другу с помощью Ethernet — они подключаются через коробку, называемую концентратором или коммутатором, который позволяет нескольким компьютерам общаться по линии вечеринки. Если их всего два, или для подключения компьютера к принтеру через Ethernet можно использовать специальный кабель без концентратора.

USB
USB — это новая высокоскоростная последовательная система.Он рассчитан на 128 устройств и позволяет подключать устройства без отключения питания. (Возможность возиться с IDE или SCSI при включенном питании может привести к повреждению.)

Firewire
Firewire, также известный как IEEE 1394, представляет собой еще более быструю последовательную систему. Он также более надежен, чем USB, по целому ряду причин. Между FireWire и SCSI идет соревнование, кто быстрее. FireWire определенно удобнее.

MIDI
MIDI — это система связи, разработанная для музыкальных инструментов. Он используется для управления другими вещами, но музыка — это главное. MIDI подробно обсуждается в другом месте на этом сайте.

Цифровые компьютеры используют двоичную систему счисления для представления всех типов информации внутри компьютеров. Буквенно-цифровые символы представлены с использованием двоичных битов (т. е. 0 и 1). Цифровые представления легче проектировать, хранить проще, точность выше.

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

Сохранение реального числа

Это структуры, как показано ниже —


Существует два основных подхода к хранению действительных чисел (т. е. чисел с дробной частью) в современных вычислениях. Это (i) запись с фиксированной точкой и (ii) запись с плавающей запятой. В записи с фиксированной запятой существует фиксированное количество цифр после запятой, тогда как число с плавающей запятой допускает различное количество цифр после запятой.

Представление с фиксированной точкой —

Это представление имеет фиксированное количество битов для целой и дробной частей. Например, если данное представление с фиксированной точкой — IIII.FFFF, то вы можете сохранить минимальное значение — 0000,0001, а максимальное — 9999,9999. Представление числа с фиксированной запятой состоит из трех частей: поле знака, целочисленное поле и дробное поле.


Мы можем представить эти числа, используя:

  • Представление со знаком: диапазон от -(2 (k-1) -1) до (2 (k-1) -1) для k бит.
  • Дополнительное представление 1: диапазон от -(2 (k-1)-1) до (2 (k-1)-1) для k бит.
  • Дополнительное представление 2: диапазон от -(2 (k-1) ) до (2 (k-1) -1) для k бит.

Представление с дополнением 2 предпочтительнее в компьютерных системах из-за свойства однозначности и упрощения арифметических операций.

Пример. Предположим, что число использует 32-битный формат, в котором 1 бит зарезервирован для знака, 15 бит для целой части и 16 бит для дробной части.

Тогда -43,625 представляется следующим образом:


Где 0 используется для представления + и 1 используется для представления. 000000000101011 — 15-битное двоичное значение для десятичного числа 43, а 10100000000000000 — 16-битное двоичное значение для дробного числа 0,625.

Преимуществом использования представления с фиксированной точкой является производительность, а недостатком — относительно ограниченный диапазон значений, которые они могут представлять. Таким образом, он обычно не подходит для численного анализа, поскольку не позволяет получить достаточное число и точность. Число, представление которого превышает 32 бита, должно храниться неточно.


Это наименьшее положительное число и наибольшее положительное число, которые можно сохранить в 32-битном представлении, как указано выше. Следовательно, наименьшее положительное число равно 2 -16 ≈ 0,000015 приблизительно, а наибольшее положительное число равно (2 · 15 -1)+(1-2 -16 )=2 · 15 (1-2 -16 ) = 32768, и разрыв между этими числа 2-16 .

Мы можем перемещать точку счисления влево или вправо с помощью только целочисленного поля 1.

Представление с плавающей запятой —

Это представление не резервирует определенное количество битов для целой или дробной части. Вместо этого он резервирует определенное количество битов для числа (называемое мантисса или мантисса) и определенное количество битов, чтобы сказать, где в этом числе находится десятичный разряд (называемый показателем степени).

Представление числа с плавающей запятой состоит из двух частей: первая часть представляет собой число с фиксированной запятой со знаком, называемое мантисса. Вторая часть обозначает положение десятичной (или двоичной) точки и называется показателем степени. Мантисса с фиксированной точкой может быть дробной или целой. Плавающая точка всегда интерпретируется как представление числа в следующей форме: Mxr e .

В регистре физически представлены только мантисса m и показатель степени e (включая их знак). Двоичное число с плавающей запятой представляется аналогичным образом, за исключением того, что оно использует основание 2 для экспоненты. Говорят, что число с плавающей запятой нормализовано, если старший разряд мантиссы равен 1.


Итак, фактическое число равно (-1) s (1+m)x2 (e-Bias) , где s – знаковый бит, m – мантисса. , e – показатель степени, а Bias – число смещения.

Обратите внимание, что целые числа со знаком и показатель степени представлены либо в виде знака, либо в виде дополнения до единицы, либо в виде дополнения до единицы.

Представление с плавающей запятой более гибкое. Любое ненулевое число может быть представлено в нормализованной форме ±(1.b1b2b3 . )2 x2 n Это нормализованная форма числа x.

Пример. Предположим, что число использует 32-битный формат: 1-битный бит знака, 8 бит для степени со знаком и 23 бита для дробной части. Ведущий бит 1 не сохраняется (поскольку он всегда равен 1 для нормализованного числа) и называется «скрытым битом»».

Затем -53,5 нормализуется как -53,5=(-110101,1)2=(-1,101011)x2 5 , что представлено ниже,


Наименьшее нормализованное положительное число, которое умещается в 32 бита, равно (1,000000000000000000000000)2x2 -126 =2 -126 ≈1,18x10 -38 , а наибольшее нормализованное положительное число, которое умещается в 32 бита, равно ( 1,11111111111111111111111)2x2 127 = (2 24 -1)x2 104 ≈ 3,40x10 38 . Эти числа представлены следующим образом:


Точность формата с плавающей запятой – это количество позиций, зарезервированных для двоичных цифр, плюс единица (для скрытого бита). В рассмотренных здесь примерах точность равна 23+1=24.

Разрыв между 1 и следующим нормализованным числом с плавающей запятой называется машинным эпсилоном. зазор составляет (1+2-23 )-1=2-23 для приведенного выше примера, но это то же самое, что и наименьшее положительное число с плавающей запятой из-за неравномерного интервала, в отличие от сценария с фиксированной точкой.

Обратите внимание, что неконечные двоичные числа могут быть представлены в представлении с плавающей запятой, например, 1/3 = (0,010101 . )2 не может быть числом с плавающей запятой, поскольку его двоичное представление не является числом с плавающей запятой. прекращение.

Представление числа с плавающей запятой IEEE —

IEEE (Институт инженеров по электротехнике и электронике) стандартизировал представление чисел с плавающей запятой в виде следующей схемы.


Итак, фактическое число равно (-1) s (1+m)x2 (e-Bias) , где s – знаковый бит, m – мантисса. , e – показатель степени, а Bias – число смещения. Бит знака равен 0 для положительного числа и 1 для отрицательного числа. Экспоненты представлены в виде дополнения или до двух.

Согласно стандарту IEEE 754 число с плавающей запятой представляется следующими способами:

  • Половина точности (16 бит): 1 бит знака, 5 бит экспоненты и 10 бит мантисса
  • Одинарная точность (32 бита): 1 знаковый бит, 8-битная экспонента и 23-битная мантисса.
  • Двойная точность (64 бита): 1 бит знака, 11 бит экспоненты и 52 бита мантисса.
  • Четверная точность (128 бит): 1 знаковый бит, 15-битная экспонента и 112-битная мантисса.

Представление особых значений —

В стандарте IEEE 754 существуют специальные значения, зависящие от разных значений показателя степени и мантиссы.

Читайте также:

десятичное двоичное преобразование
0 0 0 ( 2 0 )
1 1 1 ( 2 0 )
2 10 1 ( 2 1 ) + 0 ( 2 0 )
3 11 1 ( 2 1 ) + 1 ( 2 0 )
4 100 1 ( 2 2 ) + 0 ( 2 1 ) + 0 ( 2 0 )
5 101 1 ( 2 2 ) + 0 ( 2 1 ) + 1 ( 2 0 )
6 110 1 (2 2) + 1 (2 1) + 0 (2 0)
7 111 1 (2 2) + 1 (2 1) + 1 (2 0)
8 1000 1 ( 2 3 ) + 0 ( 2 2 ) + 0 ( 2 1 ) + 0 ( 2 0 )
9 1001 1 ( 2 3 ) + 0 ( 2 2 ) + 0 ( 2 1 ) + 1 ( 2 0 )
10 1010 1 ( 2 3 ) + 0 ( 2 2 ) + 1 ( 2 1 ) + 0 ( 2 0 )