Да, вы правы. При преобразовании целочисленного знака , представленного в 2 дополняет форму цифрой десятичной цифрой номер, вот как вы это сделаете. И 2 дополняет, как процессоры Intel хранят и выполняют математику со знаками целых чисел.
ПРИМЕЧАНИЕ. Но этот ответ не о том, как машины Intel представляют собой целые числа со знаком. Это общее.
Техника, которую вы используете для преобразования в десятичную, действительно зависит от представления, используемого оборудованием.
Аппаратный дизайнер может выбрать для хранения подписанного номера как:
- Sign-Магнитуда (1 бит определяет знак, другие указать величину, не комплемента)
- 1 в дополнении (где, 8 -битовый
11111111
представляет -0
и 00000000
в +0
)
- 2 в дополнение (популярный в общей аппаратной цели, как Intel)
- ... (есть и другие способы тоже. подробнее в Wikipedia article)
И мы, люди, должны использовать соответствующее «преобразование» при чтении тех, которые указаны в нашей предпочтительной десятичной форме.
например. Если вы разрабатываете аппаратное обеспечение, которое в основном выполняет умножения, то хранение знаковых целых чисел в форме знаковой величины имеет смысл. Вы просто умножаете знаки и величины отдельно. С другой стороны, номера дополнений 2: a little unwieldy to multiply, but not much.
Конечно, дополнение 2 - это то, как большинство аппаратных средств (почти все центральные процессоры общего пользования сегодня) сохраняют подписанные номера. Это добавляет кусок пирога.
действительно ли подписанное дело, которое я спросил, относится только к подписанным отрицательным числам? – user1466594
В случае преобразования в «десятичное с дополнительным знаковым префиксом» да, это работает именно так. Знак рассматривается отдельно, и абсолютное значение (которое в этом контексте * делает * существует для int.minvalue, потому что оно без знака) преобразуется в десятичное. – harold
спасибо большое @harold :) – user1466594