Как отличить +128 от -128 в 8-битной ячейке памяти в двоичном представлении, когда их представление одинаково?

В 8-битной ячейке памяти целое число +128 равно 10000000, но также с использованием метода дополнения до двух целое число -128 представляется как 10000000.

Я нахожу это странным. Почему +128 или 128 (без знака) представлены как 10000000? Крайний левый бит равен 1, и это означает, что он отрицательный, тогда как на самом деле он положительный ...


person user134613    schedule 20.02.2021    source источник
comment
я не понимаю твой вопрос. вы смешиваете две вещи: дополнение до двух и беззнаковые числа. это две разные вещи   -  person Raildex    schedule 20.02.2021


Ответы (1)


8 10 битов могут представлять 2 10 8 10 = 256 10 различных значений. Диапазон от -128 10 до +128 10 содержит 25 7 10 различных значений.

Невозможно представить полный диапазон целых чисел от -128 10 до +128 10 в 8 10 битах. Вам нужно будет удалить хотя бы одно целое число из этого диапазона.

Другими словами: +128 10 не может быть представлен в дополнительном двоичном представлении 8 10 битов два.

В 8-битной ячейке памяти целое число +128 равно 10000000.

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

но также с использованием метода дополнения до двух -128 целое число представляется как 10000000.

Это тоже правильно.

Я нахожу это странным. Почему +128 или 128 (без знака) представлены как 10000000?

Это два разных представления.

Крайний левый бит равен 1, и это означает, что он отрицательный, тогда как на самом деле он положительный ...

Это только означает, что это отрицательное число в представлении дополнения до двух. Но это не представление с дополнением до двух. Это простое двоичное представление.

person Jörg W Mittag    schedule 20.02.2021
comment
Итак, поскольку диапазон от -128 до +128 больше 256, то число 128 не может быть представлено в 8-битной памяти. Итак, если бы у нас была 8-битная память, то целое число 128 не могло быть сохранено, будь оно положительным или отрицательным. Но, если это 9-битная память, тогда это будет 010000000, и его можно сохранить. А отрицательное число - 110000000 и может быть сохранено. Итак, в 8-битной памяти 10000000 равно 128, если это простое представление, но если мы рассматриваем два дополнения, тогда оно не имеет значения или просто не существует. Я хорошо понял? - person user134613; 20.02.2021
comment
8 бит может представлять до 256 различных вещей. Вам решать, как выбрать до 256 вещей и как их кодировать. Вы, конечно, можете кодировать целые числа от -127 до +127, потому что это 255 разных целых чисел. Вы также можете кодировать от -128 до +127 или от -127 до +128. Вы можете кодировать все четные числа от 1000 до 1510. Все зависит от вас. - person Jörg W Mittag; 20.02.2021
comment
Это будет интерпретироваться как то, что вы запрограммируете компьютер для его интерпретации. Может +128. Это могло быть -128. Это могло быть +1000. Это мог быть пончик. - person Jörg W Mittag; 20.02.2021
comment
+1000 - это 1111101000 и его 10 бит, как его можно представить в 8-битном формате? Если только компьютер не заберет из него только 8 бит и не отменит остальные биты - person user134613; 20.02.2021
comment
Как компьютер мог интерпретировать 10000000 как +1000? - person user134613; 20.02.2021
comment
Вы программируете его так, чтобы интерпретировать его таким образом. Компьютер просто делает то, что вы ему говорите. Если вы скажете ему интерпретировать 10000000 как +128, он это сделает. Если вы скажете ему интерпретировать 10000000 как -128, он это сделает. Если вы скажете ему интерпретировать 10000000 как +1000, он это сделает. Если вы скажете ему интерпретировать 10000000 как пончик, он это сделает. - person Jörg W Mittag; 20.02.2021
comment
Ох, ладно. Спасибо тебе большое :) :) - person user134613; 20.02.2021