В современных компьютерах используется дополнительный код для представления отрицательных чисел. Идея: X + (-X) = 0 -X = 0 - X -X = 2^m - |X| дополняет |X| до 2^m Как образуется дополнительный код: - X = (NOT X) + 1 При этом старший бит числа показывает знак: +-+-------------+ |S| | +-+-------------+ Если S = 0 то число положительное Eсли S = 1 то число отрицательное Снова об дополнительном коде
Рассмотри байт (8 бит): ---------------------------------------------------------------- X X# -X = (X#+1) Число Двоичное Инверсия Обратный код Число ---------------------------------------------------------------- 0 0000 0000 1111 1111 0000 0000 0 1 0000 0001 1111 1110 1111 1111 -1 2 0000 0010 1111 1101 1111 1110 -2 15 0000 1111 1111 0000 1111 0001 -15 127 0111 1111 1000 0000 1000 0001 -127 -128 1000 0000 0111 1111 1000 0000 -128 спец случай -3 1111 1101 0000 0010 0000 0011 3 -1 1111 1111 0000 0000 0000 0001 1 ----------------------------------------------------------------
Пример другой разрядности 16-бит Число Bin Hex 1 00000000 000000001 0001 -1 11111111 111111111 FFFF
---------------------------------------------------------------------- Разрядность Беззнаковое Знаковое бит Min Max Min Max ---------------------------------------------------------------------- 8 0 255 -128 127 16 0 65535 -32768 32767 32 0 4294967295 -2147483648 2147483647 ----------------------------------------------------------------------
Сумматор складывает числа в дополнительном коде. Если складывает то может и вычитать: X - Y = X + (-Y) = X + (NOT Y) + 1
Ячейка вычитателя на базе XOR: Вычитание
Схема условной инверсии:
Поскольку вычитание зто: A - B = A + B# + 1, то схема для вычитания A - B: Vcc - это дает единицу в C0. ___ | | +-----+ +------| SUM | + A0 --| |-- S0 B0 --|>o------| |--+ + +-----+ | C1 +-----------+ | +-----+ +--| SUM | + A1 --| |-- S1 B1 --|>o------| |--+ + +-----+ | C2 +-----------+ | +-----+ +--| SUM | + A2 --| |-- S2 B2 --|>o------| |--+ + +-----+ | C3 +-----------+ | +-----+ +--| SUM | + A3 --| |-- S3 B3 --|>o------| |-- C4 + +-----+
Схема сложения и вычитания
Схема вычисления -X (negate):