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

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

ЛР №3 — Вывести на экран найденные числа и их количество
Объектно-ориентированное программирование (ООП)
199 189 руб.
из массива убрать числа кратные 3
Информатика
Программа перевода десятичного числа в двоичную и шестнадцатеричную системы счисления
Информатика
1 и последняя цифра числа, задача с большим и маленьким квадратом, квадратное ур-ие
Информатика
Представление данных в памяти персонального компьютера (числа, символы, графика, звук)
Информатика
Гибридные интеллектуальные человеко-машинные вычислительные системы и когнитивные процессы
Информатика

Решение: Рассмотрим однобайтовое представление двоичного числа. В прямом коде нуль имеет двоякое изображение: – положительный ноль, – отрицательный ноль. В общем случае ОК является дополнением модуля исходного числа до наибольшего числа без знака, помещенного в разрядную сетку. Обратный код В обратном коде (ОК), также как и в прямом коде, для обозначения знака положительного числа используется бит, равный нулю, и знака отрицательного – единице. Обратный код положительного двоичного числа совпадает с его прямым кодом. Обратный код отрицательного двоичного числа содержит единицу в знаковом разряде, формируется дополнением модуля исходного числа нулями до самого старшего разряда модуля, а затем поразрядной заменой всех нулей числа на единицу и всех единиц на нули. Обратный перевод осуществляется в той же последовательности. Пример. Записать обратный код чисел и Решение: Работа с обратным кодом вызывает ряд трудностей. В частности, возникают два нуля: положительный и отрицательный, т.е. в прямом коде (в котором представлены положительные числа) имеет место , а в обратном коде (в котором представлены отрицательные числа) . Дополнительный код Дополнительный код (ДК) строится следующим образом. Дополнительный код положительного двоичного числа совпадает с его прямым кодом. Для отрицательных двоичных чисел сначала формируется обратный код (ОК), а затем к младшему разряду (МЗР) прибавляют 1. Обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности. Пример. Записать дополнительный код чисел и Решение: Использование ДК для представления отрицательных чисел устраняет двусмысленное представление нулевого результата (возникновение двух нулей: положительного и отрицательного), так как отрицательный ноль исчезает. В общем случае использованием ДК для записи отрицательных чисел можно перекрыть диапазон десятичных чисел от –2 k -1 до +2 k -1 -1, где k – число используемых двоичных разрядов, включая знаковый. Так, с помощью одного байта можно представить десятичные числа от до , либо только положительные числа от 0 до 255 (здесь под положительными числами понимаются числа без знака). Оба этих способа представления чисел (со знаком и без знака) широко используются в ЭВМ. В ЭВМ используется быстрый способ формирования ДК. Его суть заключается в следующем. Двоичное число в ПК просматривается от младшего значащего разряда к старшему. Пока встречаются нули, их копируют в одноименные разряды результата. Первая встретившаяся единица также копируется в соответствующий разряд, а каждый последующий бит исходного числа заменяется на противоположный (0 – на 1, 1 – на 0). Пример. Записать дополнительный код числа двумя способами. Решение: 1 способ (быстрый). 2 способ. Как видно, результаты, полученные при преобразовании обоими методами, совпадают. Модифицированные обратные и дополнительные коды Модифицированные обратные и дополнительные коды двоичных чисел отличаются соответственно от обратных и дополнительных кодов удвоением значений знаковых разрядов. Знак «+» в этих кодах обозначается двумя нулевыми разрядами, а «–» – двумя единичными разрядами. Целью введения модифицированных кодов являются фиксация и обнаружение случаев переполнения разрядной сетки. В этом случае перенос из значащего разряда может исказить значение младшего знакового разряда. Значение знаковых разрядов «01» свидетельствует о положительном переполнении разрядной сетки, а «10» — об отрицательном переполнении. Лекция «6. Информационный рынок» также может быть Вам полезна. Вопросы для самопроверки: 1. Дайте определение системы счисления. Какие системы счисления Вы знаете? 2. Сформулируйте правило перевода целых чисел из одной системы счисления в другую. 3. Сформулируйте правило перевода дробных чисел из одной системы счисления в другую. 4. В чем особенность перевода чисел из восьмеричной (шестнадцатеричной) системы счисления в двоичную и наоборот? 5. Сформулируйте правило формирования прямого, обратного и дополнительного кодов двоичного числа.

Информатика. Архитектура ПК: Представление целых чисел в памяти ПК. Центр онлайн-обучения «Фоксфорд»


Поделитесь ссылкой:

Представление чисел в компьютере

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

Любые данные (числа, символы, графические и звуковые образы) в компьютере представляются в виде последовательностей из нулей и единиц. Эти последовательности можно считать словами в алфавите , так что обработку данных внутри компьютера можно воспринимать как преобразование слов из нулей и единиц по правилам, зафиксированным в микросхемах процессора. Такой взгляд роднит вычислительные машины с абстрактными вычислителями. Вспомните машины Тьюринга или нормальные алгоритмы Маркова. Элемент последовательности из нулей и единиц (член такой последовательности) называют битом. Именительный падеж — бит.

Отображение внешней информации во внутреннее представление называется

кодированием. Кодом ( франц. code, от лат. codex — свод законов) называют как сам способ отображения, так и множество слов (кодовых комбинаций), используемых при кодировании.

Числа в памяти компьютера

Существуют два способа представления чисел в памяти ЭВМ. Они называются так: форма с фиксированной точкой и форма с плавающей точкой. Форма с фиксированной точкой применяется к целым числам, форма с плавающей точкой — к вещественным числам (целым и дробным). Под точкой здесь подразумевается знак-разделитель целой и дробной части числа.

Целые отрицательные числа.

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

Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.

Получить дополнительный код можно следующим путем:

  1. записать внутреннее представление положительного числа X;
  2. записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
  3. к полученному числу прибавить 1.

Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.

Шестнадцатеричная форма результата: FF FF ЕА 04.

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

Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле: А — В = А + (-В).

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

Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.

00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 = 1 00000000 00000000 00000000 00000000

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

Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:

Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.

Полученный код используется для представления значения -231 = -2147483648.

Следовательно, диапазон представления целых чисел в 32-разрядном машинном слове: -231

В общем случае для N-разрядного машинного слова этот диапазон такой:

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

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

Вещественные числа. Числовые величины, которые могут принимать любые значения (целые и дробные) называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с веществен-ными числами. Как же такие числа представляются в памяти компьютера?

Вещественные числа в памяти компьютера представляются в форме с плавающей точкой.

Форма с плавающей точкой использует представление вещественного числа 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

Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. Значит для рассмотренного числа нормализованным представлением будет: 0.25324 * 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (р=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:

1-й байт 2-й байт 3-й байт 4-й байт

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

Что такое машинный порядок? В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127. Всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:

Прямой, обратный и дополнительный коды

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

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

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

Во втором случае старший бит принято считать знаковым разрядом (знаковым битом). Причём, если:

  • Знаковый разряд равняется нулю, то число является положительным.
  • Знаковый разряд равняется единице, то число является отрицательным.

В таком варианте диапазон десятичных чисел, которые могут быть записаны в прямом коде, составляет от — 127 до +127.

Начинай год правильно
Выигрывай призы на сумму 400 000 ₽

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

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

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

Для отрицательных чисел обратный код может быть получен из неотрицательного числа в прямом коде, путем инвертирования всех битов, то есть, единицы заменяются нулями, а нули должны быть заменены на единицы. Для преобразования отрицательного числа, которое записано в обратном коде, в положительное необходимо просто выполнить его инвертирование. Для восьми битного двоичного числа знаковым битом, как и в прямом коде, является старший, то есть, восьмой бит. Диапазон десятичных чисел, которые могут быть записаны в обратном коде, простирается от -127 до + 127. Ниже приведены примеры записи чисел в обратном коде.

Примеры записи чисел в обратном коде. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Примеры записи чисел в обратном коде. Автор24 — интернет-биржа студенческих работ

Далее рассмотрим выполнение арифметических операций с отрицательными числами в обратном коде (арифметические операции с двоичными числами).

Имеем следующие два числа:

Необходимо выполнить их сложение, которое в десятичном формате имеет общеизвестный вид:

100 + (–25) = 100 — 25 = 75

Для реализации этой операции в двоичных кодах, необходимо сначала выполнить перевод числа -25 в двоичное число в обратном коде:

Затем необходимо осуществить собственно операцию сложения двух чисел:

0110 0100 (100) + 1110 0110 (–25) = 1 0100 1010.

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

Далее отброшенную в результате старшую единицу следует прибавить к результату:

0100 1010 + 1 = 0100 1011.

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

Обратный код способен решить проблему сложения и вычитания чисел с разными знаками, но также и обладает определёнными недостатками:

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

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

Дополнительный код, аналогично прямому и обратному кодам, использует старший разряд для обозначения знака числа, то есть, этот разряд является знаковым битом. Диапазон десятичных чисел, которые могут быть записаны в дополнительном коде, простирается от -128 до +127. Запись положительных двоичных чисел в дополнительном коде выполняется так же, как и в прямом и обратном кодах.

Дополнительный код отрицательного числа может быть получен следующими способами:

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

Дополнительный код

Дополнительный код — наиболее распространенный способ представления отрицательных чисел. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел.

В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).

Диапазон десятичных чисел которые можно записать в дополнительном коде от -128 до +127. Запись положительных двоичных чисел в дополнительном коде та-же, что и в прямом и обратном кодах.

Представление чисел в дополнительном коде

Дополнительный код отрицательного числа можно получить двумя способами
1-й способ:
— инвертируем значение отрицательного числа, записанного в прямом коде (знаковый бит не трогаем)
— к полученной инверсии прибавляем 1
Пример:
Дано десятичное число -10
Переводим в прямой код:
10 = 0 000 1010 —-> -10 = 1 000 1010
Инвертируем значение (получаем обратный код):
1 000 1010 —-> 1 111 0101
К полученной инверсии прибавляем 1:
1 111 0101 + 1 = 1 111 0110 — десятичное число -10 в дополнительном коде

2-й способ:
Вычитание числа из нуля
Дано десятичное число 10, необходимо получить отрицательное число (-10) в дополнительном двоичном коде
Переводим 10 в двоичное число:
10 = 0 000 1010
Вычитаем из нуля:
0 — 0000 1010 = 1 111 0110 — десятичное число -10 в дополнительном коде

Дополнительный код отрицательного числа

Арифметические операции с отрицательными числами в дополнительном коде

Дано: необходимо сложить два числа -10 и 5
-10 + 5 = -5
Решение:
5 = 0000 0101
-10 = 1111 0110 (в дополнительном коде)
Складываем:
1111 0110 + 0000 0101 = 1111 1011, что соответствует числу -5 в дополнительном коде

Как мы видим на этом примере — дополнительный код отрицательного двоичного числа наиболее подходит для выполнения арифметических операций сложения и вычитания отрицательных чисел.

Вывод:
1. Для арифметических операций сложения и вычитания положительных двоичных чисел наиболее подходит применение прямого кода
2. Для арифметических операций сложения и вычитания отрицательных двоичных чисел наиболее подходит применение дополнительного кода

(42 голосов, оценка: 4,67 из 5)

Как это использовать?

Основную часть работы за вас проделывает сам используемый язык. В некоторых языках, например, C/C++, Rust или Swift, есть знаковые и беззнаковые типы. При этом в других вроде Java, Ruby и Python такого различия нет.

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

▍ Cи

#include #include int main() < // 8-битное беззнаковое целое число uint8_t unsignedEightBit = 255; // Максимальное значение для 8-битного беззнакового целого printf(«Unsigned 8-bit value: %un», unsignedEightBit); // 8-битное знаковое целое число int8_t signedEightBit = 127; // Максимальное значение для 8-битного знакового целого printf(«Signed 8-bit value: %dn», signedEightBit); // Демонстрация переполнения unsignedEightBit = 256; // Это значение вызовет переполнение printf(«Overflowed Unsigned 8-bit value: %un», unsignedEightBit); signedEightBit = 128; // Это значение вызовет переполнение printf(«Overflowed Signed 8-bit value: %dn», signedEightBit); return 0; >

  • Для 8-битных беззнаковых целых чисел используется тип uint8_t . Он может хранить значения от 0 до 255.
  • Для знаковых 8-битных целых чисел используется тип int8_t . Он может хранить значения от -128 до 127.

▍ Rust

В Rust для 8-битных беззнаковых целых используется тип u8 , а для 8-битных знаковых – тип i8 . Этот язык предоставляет богатую систему типов и возможности безопасности, включая проверку на целочисленные переполнения в отладочных сборках. Вот пример, демонстрирующий использование обоих типов:

fn main() < // 8-битное беззнаковое целое число let unsigned_eight_bit: u8 = 255; // Максимальное значение для 8-битного беззнакового целого println!(«Unsigned 8-bit value: <>», unsigned_eight_bit); // 8-битное знаковое целое число let signed_eight_bit: i8 = 127; // Максимальное значение для 8-битного знакового целого println!(«Signed 8-bit value: <>», signed_eight_bit); // Демонстрация переполнения // Примечание: в случае переполнения в режиме отладки в Rust активируется механизм паники // Для обработки переполнения можно использовать wrapping_add, saturating_add и тому подобное let overflowed_unsigned = unsigned_eight_bit.wrapping_add(1); println!(«Overflowed Unsigned 8-bit value: <>», overflowed_unsigned); let overflowed_signed = signed_eight_bit.wrapping_add(1); println!(«Overflowed Signed 8-bit value: <>», overflowed_signed); >

  • Для 8-битных беззнаковых целых чисел используется тип u8 , способный хранить значения от 0 до 255.
  • Для 8-битных знаковых целых используется тип i8 , способный хранить значения от -128 до 127.

Как это реализовать на ассемблере?

Я всё ещё предпочитаю обучать людей ассемблеру начиная с ассемблера 6502. Он прост и прекрасно помогает понять основы работы компьютеров. Это также позволяет познакомиться с дополнительным кодом, поскольку внутри процессора мы ограничены работой с 8-битными значениями.

▍ Ассемблер 6502

В ассемблере 6502 понятие знаковых и беззнаковых целых чисел не определяется явно через типы данных, как это происходит в высокоуровневых языках. Вместо этого способ их различения определяется тем, как вы управляете данными в коде. Отмечу, что процессор 6502 работает с 8-битными данными и 16-битными адресами.

Ниже показан пример обработки знаковых и беззнаковых 8-битных значений на ассемблере 6502:

LDA #$FF ; Загрузка в аккумулятор 8-битного значения (255 в десятичном виде или -1, если интерпретировать его как знаковое) STA $0200 ; Сохранение значения в области памяти $0200 LDA #$7F ; Загрузка в аккумулятор 127 (максимальное положительное значение для 8-битного знакового целого) STA $0201 ; Сохранение значения в области памяти $0201

  • Инструкция LDA #$FF загружает в регистр-аккумулятор значение 0xFF (255 в десятичной системе). Если интерпретировать его, как беззнаковый байт, то получится 255. Если же трактовать его как знаковый байт (используя дополнительный код), то значением будет -1.
  • Инструкция LDA #$7F загружает в аккумулятор значение 0x7F (127 в десятичной системе), являющегося максимумом для знакового 8-битного целого в представлении дополнительного кода.

Например, инструкции BPL (ветвление, если плюс) и BMI (ветвление, если минус) можно использовать для реализации ветвления на основе того, к какому знаковому числу привела последняя операция (положительному или отрицательному). При этом для сравнения беззнаковых целых чисел используются инструкции вроде BCS (ветвление, если перенос установлен) и BCC (ветвление, если переноса нет).

Это подобно вождению авто с механической коробкой передач. Автомобилю не важно, вперёд вы едете или назад – выбор нужной передачи за вами. Здесь комфортная и экономичная езда будет зависеть от своевременного включения правильной передачи. И те, кто ездит на механике, знает, что оно того стоит. Иногда.

Если у вас нет доступа к компьютеру с процессором 6502, то вы можете использовать эмулятор или онлайн-ассемблер. Мне нравится этот.

Дополнительный код. Назначение и свойства дополнительного кода

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

Дополнительный код положительного числа совпадает с его прямым и обратным кодом.

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

+1: 0000
В2дк =1: 0001

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

2) Дополнительный код получил свое название потому, что представление отрицательных чисел является дополнением прямого кода чисел до машинной единицы.

Арифметические операции над числами с фиксированной точкой в двоичном коде

3) Слагаемые должны иметь одинаковые разряды. Для выравнивания разрядной сетки слагаемых можно дописывать незначащие числа с левой части числа и справа от дробной части числа.

4) Знаковые разряды участвуют в сложении так же, как и значащие.

5) Необходимые преобразования кодов производятся с изменением знаковых чисел. Приписанные незначащие нули изменяют свое значение при преобразовании по общему правилу.

6) При образовании единицы переноса из старшего разряда при использование обратного кода эта единица складывается с младшим числовым разрядом. При использовании дополнительного кода единица изменяется.

7) Знак результата формируется автоматически. Результат представляется в коде, в котором представлено слагаемое.

1) Произведение получается путем сложения частных переменных, представляемых собой разряды множимого сдвинутых влево в соответствии с позициями разрядов множителя.

2) Частные произведения, полученные умножением на ноль игнорируются.

3) При умножении n-разрядных сомножителей произведение увеличивается до n + n = 2n разрядов.

4) Знак произведения формируется путем сложения знаковых разрядов сомножителей.

5) Возможные переносы знакового разряда игнорируются.

Целое число без знака может занимать:

2 байта (0.. 2 16 -1)

Целое число со знаком может занимать:

1 байт (-2 7 .. 2 7 -1)

2 байта (-2 15 .. 2 15 -1)

4 байта (-2 31 .. 2 31 -1)

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Обратный код двоичного числа

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

Примеры обратного кода для правильных дробей:

Примеры обратного кода для целых чисел:

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

Хотя обратный код и позволяет решить проблему сложения и вычитания чисел с различными знаками, он имеет и недостатки. Во-первых, процесс суммирования чисел является двухэтапным, что увеличивает время выполнения этой операции. Во-вторых, как и в прямом коде, в обратном — два представления нуля: и .

Дополнительный код двоичного числа

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

Для примера рассмотрим число X, которое в прямом коде имеет вид:

Тогда обратный код можно записать как

Для получения дополнительного кода прибавим 1 к младшему разряду обратного кода:

Примеры дополнительного кода для правильных дробей:

Примеры дополнительного кода для целых чисел:

Положительные числа в дополнительном коде записываются так же, как и в прямом. При представлении чисел в дополнительном коде есть только одна форма записи нуля: 0.0. 00, причём ноль считается положительным числом, так как его знаковый бит равен 0.

В большинстве вычислительных машин отрицательные числа представлены в дополнительном коде.

Сложение и вычитание чисел в обратном и дополнительном кодах

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

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

Пример 1. Сложить числа и

При использовании обратного кода получим:

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

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

Оцените статью
TutShema
Добавить комментарий