БЕСПЛАТНАЯ ПОДГОТОВКА К ЕГЭ ПО ПРОФИЛЬНОЙ МАТЕМАТИКЕ
Подготовься к ЕГЭ-2026 по профильной математике самостоятельно с помощью сервиса "1С:Репетитор"!
Понятная теория и эффективные тренажеры с объяснением! Вы успеете подготовиться к экзамену! Начните занятия прямо сейчас!
design_arrow
Обратный (инверсный) код

Обратный (инверсный) код

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

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

Обратный код в двоичной системе

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

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

Чтобы получить обратный код числа на практике, нужно заранее выбрать разрядность и затем строго работать только в этой -битной сетке. Сначала фиксируют длину слова (например, 8 или 16 бит): это гарантирует, что инверсия выполняется корректно и дает однозначный результат. Далее действуют по правилам обратного кода в пределах выбранной разрядности:

  • выбрать разрядность n и записать модуль числа в двоичном виде, дополнив слева нулями до n бит;
  • если число положительное — оставить запись без изменений;
  • если число отрицательное — инвертировать все биты полученного nnn-битного представления;
  • при сложении учитывать перенос из старшего разряда: в обратном коде он прибавляется к младшему разряду результата (end-around carry);
  • помнить о двух представлениях нуля: 000…000 и 111…111, и при необходимости выполнять нормализацию (обычно −0 приводят к +0).

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

Как получить обратный код числа?

Получить обратный (инверсный) код — значит корректно представить отрицательное значение в фиксированной разрядности с помощью побитовой инверсии. Принципиально важно заранее выбрать длину слова (например, 8, 16 или 32 бита), потому что инверсия выполняется только в пределах этой разрядной сетки. Если разрядность меняется, меняется и битовая строка, а значит и результат проверки.

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

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

Алгоритм (для разрядности n):

  • зафиксируйте разрядность n и запишите модуль числа в двоичном виде, дополнив слева нулями до n бит;
  • если число положительное, оставьте полученную nnn-битную запись без изменений — это и есть его код;
  • если число отрицательное, инвертируйте каждый бит в пределах nnn бит (0↔1) — полученная строка и будет обратным кодом;
  • для контроля выполните обратное преобразование: снова инвертируйте биты, получите модуль и восстановите знак;
  • при сложении учитывайте перенос по кругу (end-around carry): перенос из старшего разряда прибавляется к младшему разряду результата.

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

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

Сложение и вычитание в обратном коде основаны на стандартной двоичной арифметике, но имеют принципиальную особенность: перенос из старшего разряда не отбрасывается, а добавляется к младшему разряду (end-around carry). Этот механизм позволяет согласовать результат с правилами представления отрицательных значений через инверсию, однако требует дисциплины при вычислениях – особенно при работе с фиксированной разрядностью и при контроле переполнения. На практике именно корректная обработка «кругового» переноса отличает верный результат от формально похожего, но неправильного. 

Пример 1 (8 бит): 5 + (−3)

+5 = 00000101

−3: +3 = 00000011 → инверсия → 11111100

Сложение:
  00000101

+ 11111100

=1 00000001 

Перенос вышел за пределы 8 бит, добавляем его по кругу:

00000001 + 1= 00000010 → результат 2.

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

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

Пример 2 (8 бит): 7 – 57 как 7 + (−5) 

+7 = 00000111

−5: +5 = 00000101 → инверсия → 11111010

Сложение: 

 00000111

+ 11111010

=1 00000001 

Перенос по кругу: 00000001 + 1 = 00000010 → результат 2. 

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

Важно запомнить три опорные идеи обратного (инверсного) кода. Во-первых, разрядность задаётся заранее и не меняется в процессе: именно она определяет, как выглядит отрицательное число после инверсии. Во-вторых, при сложении нужно обязательно проверять перенос из старшего разряда и применять перенос по кругу (end-around carry) — без этого результат часто будет неверным. В-третьих, обратный код имеет два нуля (+0 и −0), поэтому при ответе и проверке полезно выполнять нормализацию: если получился 111…111, считать его 000…000.

Если вы уверенно выполняете три действия — (1) фиксируете nnn бит, (2) правильно получаете отрицательное значение инверсией, (3) учитываете перенос по кругу и нормализацию нуля — значит, вы действительно понимаете, как работает знаковая арифметика в двоичных представлениях. Это знание пригодится дальше при изучении дополнительного кода, где арифметика становится проще, но логика построения отрицательных чисел опирается на те же базовые принципы.