Почему 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-битных чисел), которое нельзя отрицать - вызывая переполнение, о котором вы спрашиваете. У кого-то такого нет.