Определение дополнения двоих на простом языке - PullRequest
0 голосов
/ 22 января 2020

Я искал в Интернете, но не могу найти простое определение дополнения Two без использования алгоритмов и математики, поэтому просто для того, чтобы подтвердить, что:

Дополнение Two в основном обращает знак числа в двоичный файл, так что если у меня есть 2, то установите его на -2, а если я получу -2, то установите на 2. Это все?

1 Ответ

0 голосов
/ 22 января 2020

Дополнение Two двоичного числа фиксированной ширины X - это двоичное число, которое вы получаете, инвертируя двоичные цифры X и добавляя единицу, исключая возможное переполнение.

twos_compl(X){ return ~X+1; }

Например, для чисел шириной 4 бита :

X       ~X      ~X+1
0000    1111    0000
0001    1110    1111
0010    1101    1110
0011    1100    1101

Если компьютерная архитектура использует два дополнения для представления математически отрицательных чисел со знаком, т. Е. Если twos_compl(X) == -X, то некоторые математические операции становятся простыми в реализации.

(В таком случае представление числа со знаком, старший бит которого означает -pow(2,bit_index_from_the_right), а не обычное (обычно для чисел без знака и для любого другого бита в представлении дополнения со знаком два) +pow(2,bit_index_from_the_right).)

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

In C на платформе дополнения до двух:

int sadd(int A, int B) { return A+B; }
unsigned uadd(unsigned A, unsigned B) { return A+B; }

будет компилироваться в та же самая инструкция.

И по определению дополнения до двух, так будет:

int neg(int A) { return -A; }

и

int neg2(int A) { return ~A+1; }

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

...