Как соотносятся подписанные отрицательные и положительные версии одного и того же двоичного целого числа в десятичном формате? - PullRequest
0 голосов
/ 06 января 2019

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

Какова взаимосвязь между двоичным целым числом, интерпретируемым как положительное целое число, и точно таким же двоичным целым числом, интерпретируемым как отрицательное целое число в терминах десятичного числа? Давайте возьмем для примера целое число 5:

5 - это 101

-5 - 11111011

11111011 равен 251, если интерпретировать его как число без знака.

Вопрос в том, какова десятичная связь между -5 и 251? Существует ли прямая связь помимо действия, которое происходит в двоичной системе счисления? Смысл, есть ли в десятичном виде какое-то правило, что мы можем напрямую отобразить любое заданное десятичное целое число в десятичное целое, для которого было бы идентичное двоичное целое при преобразовании из положительного в отрицательное и наоборот?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Предполагая, что мы работаем с двумя дополнениями, у нас есть вектор n битов:

n = <a(n-1), a(n-2), ..., a(2), a(1), a(0)>

интерпретируется как:

n_signed = -[a(n-1) * 2^(n-1)] + sum(i=0, i=n-2) {a(i) * 2^(i)}

, тогда как обращение с ним как без знака приводит к:

n_unsigned = sum(i=0, i=n-1) {a(i) * 2^(i)}

Отсюда разница:

n_unsigned - n_signed = 2 * [a(n-1) * 2^(n-1)]

Надеюсь, это поможет (и извините за плохое форматирование).

0 голосов
/ 06 января 2019

Обратите внимание, что -5 на самом деле не 11111011 в двоичном формате - это двоичное представление в восьми битах . Если вы используете другое количество битов, вы получите другое двоичное представление. Например, если вы используете 16 бит, как это часто делается, вы получите 1111111111111011, что составляет 65531.

Это ключ. В восьми битах мы рассматриваем 2^8, что составляет 256. (Эта каретка означает возведение в степень.) Затем мы видим, что -5 представлен 256 - 5.

Итак, окончательный ответ таков: для данного положительного целого числа n, которое должно быть представлено в b двоичных разрядах, число -n затем представляется как

(2 ^ b) - n

По крайней мере, если число битов b достаточно велико. Это понятно? Можно сказать гораздо больше, чем это, но вам лучше прочитать больше о нотации «два дополнения» в книге или на большой веб-странице.

...