Представьте число 83 в однобайтовом знаковом представлении дополнительный код

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

Не будем загружать Вас информацией что это за кода. Такого материала валом на других ресурсах.

Что делаете Вы?

Вводите целое число ( отрицательное в том числе) или выражение.

Указываете разрядность ячейки памяти

Указываете в какой системе счисления необходимо получить результат.

Что делает бот?

Высчитывает выражение. Если выражение дробное, то отбрасывает дробную часть

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

Удобное и быстрое решение для ускорения работы.

Обратный и дополнительный код числа онлайн | 2015-09-23 07:36:32 | Варламов Дмитрий |

—> Расчет в любой системе счисления прямого, дополнительного и обратного кода, произвольного целого числа. | число, обратный, код, дополнительный, счисления

  • Русский и английский алфавит в одну строку
  • Часовая и минутная стрелка онлайн.Угол между ними.
  • Расчет пропорций и соотношений
  • Массовая доля химического вещества онлайн
  • Декoдировать текст u0xxx онлайн
  • Универсальный калькулятор комплексных чисел онлайн
  • Перемешать буквы в тексте онлайн
  • Частотный анализ текста онлайн
  • Поворот точек на произвольный угол онлайн
  • Обратный и дополнительный код числа онлайн
  • Остаток числа в степени по модулю
  • Площадь многоугольника по координатам онлайн
  • Как перевести градусы в минуты и секунды
  • Растворимость металлов в различных жидкостях
  • Расчет процентов онлайн
  • Поиск объекта по географическим координатам
  • DameWare Mini Control. Настройка.
  • Время восхода и захода Солнца и Луны для местности
  • Калькулятор географических координат
  • Расчет значения функции Эйлера
  • Произвольный треугольник по заданным параметрам
  • НОД двух многочленов. Greatest Common Factor (GCF)
  • Теория графов. Матрица смежности онлайн
  • Перевод числа в код Грея и обратно
  • Сообщество животных. Кто как называется?
  • Проекция точки на плоскость онлайн
  • Площадь пересечения окружностей на плоскости
  • Непрерывные, цепные дроби онлайн
  • Из показательной в алгебраическую. Подробно
  • Географические координаты любых городов мира
  • Онлайн определение эквивалентного сопротивления
  • Калькулятор онлайн расчета количества рабочих дней
  • Система комплексных линейных уравнений
  • Расчет понижающего конденсатора
  • Определение формулы касательной к окружности
  • Расчет заряда и разряда конденсатора через сопротивление
  • Месторождения золота и его спутники
  • Каноническое уравнение гиперболы по двум точкам
  • Дата выхода на работу из отпуска, декрета онлайн
  • Построить ненаправленный граф по матрице

Дополнительный и обратный коды. Числа в памяти компьютера | §19 | Информатика 8 класс | Семакин

1) Сложите 83 и 76 в однобайтовом знаковом представлении (дополнительный код). Затем преобразуйте результат в число. 2

Решёнка.Ру — на шаг вперёд с нашими ответами!

1) Сложите 83 и 76 в однобайтовом знаковом представлении (дополнительный код). Затем преобразуйте результат в число.
2) Вычтите 73 из -108 в однобайтовом знаковом представлении (дополнительный код). Затем преобразуйте результат в число.
3) Сколько единиц будет в коде, если число 59 сдвинуть 2 раза вправо, а затем 3 раза влево?
4) IP-адрес: 153.189.17.23, маска: 255.255.240.0. Какой адрес сети соответствует этим данным?
5) IP-адрес: 153.189.17.23, адрес сети: 153.160.0.0. Какой второй слева байт маски?
6) Вы спросили друга, сколько процентов он набрал за тестирование. Друг закодировал свой ответ, выполнив побитовый XOR с числом 3510. Результатом было число 2410. Какой процент набрал друг? Подсказка: для декодирования переведите числа в двоичную систему счисления.

Подробный ответ:

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

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

1) Сложение 83 и 76 в однобайтовом дополнительном коде:
— 83 в двоичной системе: 01010011
— 76 в двоичной системе: 01001100
— Сложим их: 10111111
— Это -65 в десятичной системе.

2) Вычитание 73 из -108 в однобайтовом дополнительном коде:
— -108 в двоичной системе (дополнительный код): 10001011
— 73 в двоичной системе: 01001001
— Вычтем их: 11000010
— Это -66 в десятичной системе.

3) Сдвиг числа 59 вправо на 2 бита, а затем влево на 3 бита:
— 59 в двоичной системе: 00111011
— Сдвиг вправо на 2 бита: 00001110
— Сдвиг влево на 3 бита: 01110000
— В коде осталось 4 единицы.

4) Нахождение адреса сети:
— IP-адрес: 153.189.17.23 в двоичной системе: 10011001.10111101.00010001.00010111
— Маска: 255.255.240.0 в двоичной системе: 11111111.11111111.11110000.00000000
— Побитовое И между IP-адресом и маской дает адрес сети: 10011001.10111101.00010000.00000000, что в десятичной системе равно 153.189.16.0.

5) Определение второго слева байта маски:
— Маска: 255.255.240.0 в двоичной системе: 11111111.11111111.11110000.00000000
— Второй слева байт маски: 11110000 в двоичной системе, что равно 240 в десятичной системе.

6) Декодирование ответа друга:
— Результат XOR: 2410 в десятичной системе
— 3510 XOR X = 2410
— X = 3510 XOR 2410 = 1100 в двоичной системе, что равно 12 в десятичной системе.
— Друг набрал 12 процентов.

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

Задание для закрепления:
Что получится, если выполнить операцию XOR между числами 27 и 15 в двоичной системе?

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

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

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

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

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

Число двоичных разрядов
Рассчитать
Представление положительного числа
Обратный код
Дополнительный код
 Ссылка  Сохранить  Виджет

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

Обратный код числа, или дополнение до единицы (one’s complement) это инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все нули заменяются на единицы, а единицы на нули.

Дополнительный код числа, или дополнение до двойки (two’s complement) это обратный код, к младшему значащему разряду которого прибавлена единица

А это все для удобной работы со знаками. Поскольку я все люблю понимать на примерах, рассказывать я тоже буду на примерах. Итак, предположим, что у нас 4 разряда для работы с двоичными числами. Представить таким образом можно 16 чисел — 0, 1, . 15
00 — 0000
.
15 — 1111

Но если нет знака, убогая получается арифметика. Нужно вводить знак. Чтобы никого не обидеть, половину диапазона отдадим положительным числам (8 чисел), половину — отрицательным (тоже 8 чисел). Ноль, что отличает машинную арифметику от обычной, мы отнесем в положительные числа (в обычной арифметике у нуля нет знака, если не ошибаюсь). Итого, в положительные числа попадают 0. 7, а в отрицательные -1, . -8.

Для различия положительных и отрицательных чисел выделяют старший разряд числа, который называется знаковым (sign bit)
0 в этом разряде говорит нам о том, что это положительное число, а 1 — отрицательное.

С положительными числами все вроде бы понятно, для их представления можно использовать прямой код
0 — 0000
1 — 0001
7 — 0111

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

Вот для их представления как раз и используется дополнительный код.
То есть, -7 в дополнительном коде получается так
прямой код 7 = 0111
обратный код 7 = 1000
дополнительный код 7 = 1001

Обратим внимание на то, что прямой код 1001 представляет число 9, которое отстоит от числа -7 ровно на 16, или .
Или, что тоже самое, дополнительный код числа «дополняет» прямой код до , т.е. 7+9=16

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

Пара примеров
7-3=4
0111 прямой код 7
1101 дополнительный код 3
0100 результат сложения 4

-1+7=6
1111 дополнительный код 1
0111 прямой код 7
0110 результат сложения 6

Что касается переполнения — оно определяется по двум последним переносам, включая перенос за старший разряд. При этом если переносы 11 или 00, то переполнения не было, а если 01 или 10, то было. При этом, если переполнения не было, то выход за разряды можно игнорировать.

Примеры где показаны переносы и пятый разряд

00111 прямой код 7
00001 прямой код 1
01110 переносы
01000 результат 8 — переполнение

Два последних переноса 01 — переполнение

-7+7=0
00111 прямой код 7
01001 дополнительный код 7
11110 переносы
10000 результат 16 — но пятый разряд можно игнорировать, реальный результат 0

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

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

P.S. Ну а обратный код дополняет число до , или до всех 1, потому и называется дополнением до 1. Им тоже можно представлять отрицательные числа, и реализовать вычитание и сложение схемой сложения, только сложение там хитрее — с циклическим переносом, ну и представить можно меньше на одно число, так как все единицы уже заняты — это обратный код нуля, эдакий «минус нуль», то есть диапазон получается, если брать наш пример от -7 до 7. Не так удобно, одним словом.

1)сложите числа 83 и 76 в однобайтовом знаковом представлении (дополнительный код). результат переведите в число. код результата: значение результата

2)отнимите число 73 от -108 в однобайтовом знаковом представлении (дополнительный код). результат переведите в число. код результата:
значение результата:

3)сколько единиц будет в коде, если число 59 сдвинуть 2 раза вправо, а после этого 3 раза влево?

4)ip-адрес: 153.189.17.23 маска: 255.255.240.0 чему равен адрес сети?

5)ip-адрес: 153.189.17.23 адрес сети: 153.160.0.0 чему равен второй слева байт маски?

6)вы спросили друга, сколько процентов он набрал за тестирование. друг решил закодировать свой ответ, выполнив побитовый xor с числом 3510. в результате у него получилось 2410. сколько процентов набрал друг? подсказка: для декодирования переведите числа в 2сс.

О ля, чел, решай сам Школу Программистов, никто не знает как)

4,5(94 оценок)

246.о За несколько одинаковых карандашей заплатили 80 к. Сколько нужно заплатить за такие же карандаши, если их:
а) в 2 раза больше?===1р60к б) в 2 раза меньше? ===40к

247.о За несколько одинаковых карандашей заплатили 80 к. Сколько нужно заплатить за такое же количество карандашей, каждый из которых:
а) в 2 раза дороже?===1р60к б) в 2 раза дешевле?===40к

248.о Имеются деньги на покупку 30 карандашей.
а) Сколько тетрадей можно купить на те же деньги, если тетрадь дешевле карандаша в 2 раза?===60
б) Сколько ручек можно купить на те же деньги, если ручка дороже карандаша в 10 раз? 3

249. Велосипедист за несколько часов проехал 36 км.
а) Какое расстояние пройдет за то же время пешеход, скорость которого в 3 раза меньше скорости велосипедиста?===12
б) Какое расстояние проедет за то же время мотоциклист, скорость которого в 5 раз больше скорости велосипедиста?===180

250. Некоторое расстояние велосипедист проехал за 3 ч.
а) За сколько часов это расстояние пройдет пешеход, скорость которого в 3 раза меньше скорости велосипедиста? 9ч
б) За сколько часов это расстояние проедет мотоциклист, скорость которого в 5 раз больше скорости велосипедиста? 3/5=0,6ч=36мин

251.о Какова зависимость между:
1) ценой одного карандаша и стоимостью нескольких карандашей при постоянном их количестве? цена=стоимость : кол-во
2) количеством карандашей и их стоимостью при постоянной их цене?
кол-во= стоимость :цену
3) количеством карандашей и их ценой при постоянной их стоимости?
кол-во= стоимость : цена

252.о Какова зависимость между:
1) скоростью и расстоянием при постоянном времени движения? расстояние= скорость * время
2) временем и расстоянием при постоянной скорости? Время= расстояние : скорость
3) временем движения и скоростью при постоянном пути?
время= путь: скорость

253.о Какова зависимость между:
1) Количеством тракторов и площадью, которую они вспашут за 1 день? площадь= колич-во тракторов * производительность одного трактора в день
2) Числом дней работы трактора и площадью, которую он вспашет?
площадь= число дней*производительность одного трактора в день
3) Количеством тракторов и числом дней, за которые они вспашут поле?
кол-во тракторов= площадь поля : (производительность одного трактора в день* число дней)

254.о 1) Покупают одинаковые тетради. Какова зависимость между количеством тетрадей и стоимостью покупки?
стоимость= кол-во * цену

2) Расстояние между городами можно проехать на велосипеде или на мотоцикле. Какова зависимость между временем и скоростью движения?

чем выше скорость- тем меньше время
время= путь : скорость

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

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

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

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

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

Число двоичных разрядов
Рассчитать
Представление положительного числа
Обратный код
Дополнительный код
 Ссылка  Сохранить  Виджет

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

Обратный код числа, или дополнение до единицы (one’s complement) это инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все нули заменяются на единицы, а единицы на нули.

Дополнительный код числа, или дополнение до двойки (two’s complement) это обратный код, к младшему значащему разряду которого прибавлена единица

А это все для удобной работы со знаками. Поскольку я все люблю понимать на примерах, рассказывать я тоже буду на примерах. Итак, предположим, что у нас 4 разряда для работы с двоичными числами. Представить таким образом можно 16 чисел — 0, 1, . 15
00 — 0000
.
15 — 1111

Но если нет знака, убогая получается арифметика. Нужно вводить знак. Чтобы никого не обидеть, половину диапазона отдадим положительным числам (8 чисел), половину — отрицательным (тоже 8 чисел). Ноль, что отличает машинную арифметику от обычной, мы отнесем в положительные числа (в обычной арифметике у нуля нет знака, если не ошибаюсь). Итого, в положительные числа попадают 0. 7, а в отрицательные -1, . -8.

Для различия положительных и отрицательных чисел выделяют старший разряд числа, который называется знаковым (sign bit)
0 в этом разряде говорит нам о том, что это положительное число, а 1 — отрицательное.

С положительными числами все вроде бы понятно, для их представления можно использовать прямой код
0 — 0000
1 — 0001
7 — 0111

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

Вот для их представления как раз и используется дополнительный код.
То есть, -7 в дополнительном коде получается так
прямой код 7 = 0111
обратный код 7 = 1000
дополнительный код 7 = 1001

Обратим внимание на то, что прямой код 1001 представляет число 9, которое отстоит от числа -7 ровно на 16, или .
Или, что тоже самое, дополнительный код числа «дополняет» прямой код до , т.е. 7+9=16

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

Пара примеров
7-3=4
0111 прямой код 7
1101 дополнительный код 3
0100 результат сложения 4

-1+7=6
1111 дополнительный код 1
0111 прямой код 7
0110 результат сложения 6

Что касается переполнения — оно определяется по двум последним переносам, включая перенос за старший разряд. При этом если переносы 11 или 00, то переполнения не было, а если 01 или 10, то было. При этом, если переполнения не было, то выход за разряды можно игнорировать.

Примеры где показаны переносы и пятый разряд

00111 прямой код 7
00001 прямой код 1
01110 переносы
01000 результат 8 — переполнение

Два последних переноса 01 — переполнение

-7+7=0
00111 прямой код 7
01001 дополнительный код 7
11110 переносы
10000 результат 16 — но пятый разряд можно игнорировать, реальный результат 0

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

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

P.S. Ну а обратный код дополняет число до , или до всех 1, потому и называется дополнением до 1. Им тоже можно представлять отрицательные числа, и реализовать вычитание и сложение схемой сложения, только сложение там хитрее — с циклическим переносом, ну и представить можно меньше на одно число, так как все единицы уже заняты — это обратный код нуля, эдакий «минус нуль», то есть диапазон получается, если брать наш пример от -7 до 7. Не так удобно, одним словом.

Пример. Число: -1

Код модуля числа (в однобайтовом формате) 0,0000001 Обратный код 1,1111110 Представление числа в разрядной сетке показано на рис. 2.10

11111110

Пример. Число –127

Код модуля числа 0,1111111 Обратный код числа 1,0000000. Представление числа в обратном коде показано на рис. 2.11

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

Рис. 2.12 Представление числа –127 в дополнительном коде показано на рис. 2.13

10000001
  1. Х1>0 иX2>0. При суммировании складываются все разряды, включая разряд знака.
00000101
+
00001001
00001110
00000011
+
11110101
11111000
  1. 1111000обр=1 0000111пр= -710
  1. Х1>0,X22|1
00001010
+
11111100
0 0000110
+1
00000111
11111100
+
11111000
1 1110100
+1
11110101

Обратный код числа -310 -3 + Обратный код числа -710-7 -10 Обратный код числа -1010 Полученный непосредственно сразу неверный результат (обратный код числа –1110) исправляется путем переноса единицы из знакового разряда в младший разряд суммы. При выполнении операции может появиться число, старшие разряды которого не помещаются в отведенной для него области памяти – возникает переполнение разрядной сетки формата числа. Рассмотрим два возможных случая переполнения.

    1. Х1>0 , X2>0 и S=X1+X22 n -1 , гдеn– количество разрядов формата числа (для однобайтового форматаn=8, 2 n -1 =2 7 =128)

    Пример Десятичная запись Двоичные коды

    01000001
    +
    01100001
    10100010

    65 + 97 Переполнение 162 Здесь имеет место переполнение разрядной сетки: семи разрядов цифровой части недостаточно для размещения восьмиразрядной суммы (16210=101000102), поэтому старший разряд суммы оказывается в знаковом разряде и знак суммы оказывается несовпадающим со знаком слагаемых, что является признаком переполнения разрядной сетки.

    1. Х121|+|X2|2 n -1

    Пример Десятичная запись Двоичные коды

    11000000
    +
    10100000
    0 1100000
    +1

    Обратный код числа -6310 -63 + Обратный код числа -9510 -95 -158 Переполнение Здесь также знак суммы не совпадает со знаками слагаемых, что является признаком переполнения разрядной сетки. При сложении дополнительных кодов чисел Х1и Х2имеют место те же четыре основных и два особых случая. 1. Х1>0 иX2>0. Аналогично случаю 1 для обратных кодов. 2. Х1>0,X22|>X1. Пример. Десятичная запись Двоичные коды

    00000011
    +
    11110110
    11111001

    3 — Дополнительный код числа -1010 10 Дополнительный код числа -710 -7 При переводе дополнительного (доп) кода в прямой (пр) получим: 3. Х1>0,X22|1 Пример Десятичная запись Двоичные коды

    00001010
    +
    11111101
    0 0000111
    11111101
    +
    11111001
    1 1110110

    -3 + Дополнительный код числа -710 -7 Дополнительный код числа -1010 -10 перенос отбрасывается Случаи переполнения разрядной сетки аналогичны случаям переполнения для обратных кодов. Сравнение использования обратного и дополнительного кодов показывает, что преобразование отрицательного числа в обратный код занимает меньше времени, однако время выполнения сложения в дополнительных кодах меньше, чем в обратных, так как в этом случае отсутствует необходимость переноса единицы из знакового разряда в младший разряд результата.

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

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

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

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

    Обратный код числа, или дополнение до единицы (one’s complement) это инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все нули заменяются на единицы, а единицы на нули.

    Дополнительный код числа, или дополнение до двойки (two’s complement) это обратный код, к младшему значащему разряду которого прибавлена единица

    А это все для удобной работы со знаками. Поскольку я все люблю понимать на примерах, рассказывать я тоже буду на примерах. Итак, предположим, что у нас 4 разряда для работы с двоичными числами. Представить таким образом можно 16 чисел — 0, 1, . 15
    00 — 0000
    .
    15 — 1111

    Но если нет знака, убогая получается арифметика. Нужно вводить знак. Чтобы никого не обидеть, половину диапазона отдадим положительным числам (8 чисел), половину — отрицательным (тоже 8 чисел). Ноль, что отличает машинную арифметику от обычной, мы отнесем в положительные числа (в обычной арифметике у нуля нет знака, если не ошибаюсь). Итого, в положительные числа попадают 0. 7, а в отрицательные -1, . -8.

    Для различия положительных и отрицательных чисел выделяют старший разряд числа, который называется знаковым (sign bit)
    0 в этом разряде говорит нам о том, что это положительное число, а 1 — отрицательное.

    С положительными числами все вроде бы понятно, для их представления можно использовать прямой код
    0 — 0000
    1 — 0001
    7 — 0111

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

    Вот для их представления как раз и используется дополнительный код.
    То есть, -7 в дополнительном коде получается так
    прямой код 7 = 0111
    обратный код 7 = 1000
    дополнительный код 7 = 1001

    Обратим внимание на то, что прямой код 1001 представляет число 9, которое отстоит от числа -7 ровно на 16, или .
    Или, что тоже самое, дополнительный код числа «дополняет» прямой код до , т.е. 7+9=16

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

    Пара примеров
    7-3=4
    0111 прямой код 7
    1101 дополнительный код 3
    0100 результат сложения 4

    -1+7=6
    1111 дополнительный код 1
    0111 прямой код 7
    0110 результат сложения 6

    Что касается переполнения — оно определяется по двум последним переносам, включая перенос за старший разряд. При этом если переносы 11 или 00, то переполнения не было, а если 01 или 10, то было. При этом, если переполнения не было, то выход за разряды можно игнорировать.

    Примеры где показаны переносы и пятый разряд

    00111 прямой код 7
    00001 прямой код 1
    01110 переносы
    01000 результат 8 — переполнение

    Два последних переноса 01 — переполнение

    -7+7=0
    00111 прямой код 7
    01001 дополнительный код 7
    11110 переносы
    10000 результат 16 — но пятый разряд можно игнорировать, реальный результат 0

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

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

    P.S. Ну а обратный код дополняет число до , или до всех 1, потому и называется дополнением до 1. Им тоже можно представлять отрицательные числа, и реализовать вычитание и сложение схемой сложения, только сложение там хитрее — с циклическим переносом, ну и представить можно меньше на одно число, так как все единицы уже заняты — это обратный код нуля, эдакий «минус нуль», то есть диапазон получается, если брать наш пример от -7 до 7. Не так удобно, одним словом.

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