Почему 128 в одном и двух дополнениях используют 8-битное переполнение?

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

Не будет ли это:

Одно дополнение: 0111 1111

Два дополнения: 0111 1110

Без переполнения

Но правильный ответ:

Одно дополнение: 0111 1111

Два дополнения: 0111 1111

перелив

Дополнительный вопрос:

Как получается, что 1 в одном и два дополнения 0000 0001 а также 0000 0001 соответственно. Почему вы не перевернули биты, как мы сделали с 128?

2 ответа

Решение

Дополнения One и Two являются способами представления целых чисел со знаком.

Для представления своего дополнения:

  • Положительные числа: представлены с обычным двоичным представлением
    • Например: десятичное значение 1 будет представлено в 8-битном дополнении One как 0000 0001
  • Отрицательные числа: представлены путем дополнения двоичного представления его величины
    • Например: десятичное значение -127 будет представлено в 8-битном дополнении One как 1000 0000, потому что двоичное представление 127 равно 0111 1111, когда дополнено, что будет 1000 0000

Для представления дополнения двоих:

  • Положительные числа: представлены с обычным двоичным представлением
    • Например: десятичное значение 1 будет представлено в 8-битном дополнении One как 0000 0001
  • Отрицательные числа: представляются путем дополнения двоичного представления его величины и добавления 1 к значению
    • Например: десятичное значение -127 будет представлено в 8-битном дополнении One как 1000 0001, потому что двоичное представление 127 будет 0111 1111, когда дополнено, будет 1000 0000, затем добавьте 0000 0001, чтобы получить 1000 0001

Следовательно, 128 переполняется в обоих случаях, потому что двоичное представление 128 равно 1000 0000, которое в единицах дополняет, представляет -127, а в дополнении двойки представляет -128. Чтобы иметь возможность представлять 128 в одном и двух дополнениях, вам потребуется 9 битов, которые будут представлены как 0 1000 0000.

В 8-битном без знака 128 - это 1000 0000, В дополнение к 8-битному двоичному коду эта двоичная последовательность интерпретируется как -128. В 8-битном двоичном дополнении нет представления для 128.

0111 1110 126

Как уже упоминалось в комментарии, 0111 1111 127

См. https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html.

Оба дополнения и дополнение к одному являются способами представления отрицательных чисел. Положительные числа - это просто двоичные числа; здесь нет никакого дополнения.

Я работал на одном компьютере со своей арифметикой (LINC). Я предпочитаю два дополнения, поскольку для нуля есть только одно представление. Недостатком дополнения к двум является то, что есть одно значение (-128 для 8-битных чисел), которое нельзя отрицать - вызывая переполнение, о котором вы спрашиваете. У кого-то такого нет.

Другие вопросы по тегам