Как отрицательные числа представлены в 32-битном значении целого числа?

Как отрицательное число представлено в 32-разрядном значении целого числа? Это два или один дополнение? или последний бит слева - это как флаг? Например: (-10)

Ответ 1

Большинство компьютеров в наши дни используют два дополнения для целых чисел со знаком, но могут варьироваться в зависимости от архитектуры оборудования, языка программирования или других специфичных для платформы вопросы.

Для представления с двумя дополнениями наиболее значимый ( "самый левый" ) бит называется битом знака, и он будет установлен для отрицательного целого числа и очищен для неотрицательного целого. Однако это больше, чем просто "флаг". Дополнительную информацию см. В статье Википедии.

Ответ 2

Обычно это двойное дополнение.

Ответ 3

Из стандарта C99:

Для целочисленных типов со знаком, биты представление объекта должно быть разделенных на три группы: биты ценности, биты заполнения и знаковый бит. Там не должно быть никаких битов заполнения; там должен быть ровно одним битом знака. каждый бит, который является битом значения, должен иметь то же значение, что и тот же бит в объектное представление соответствующий неподписанный тип (если являются битами значения M в подписанном типе и N в неподписанном типе, то M = N). Если знаковый бит равен нулю, он должен не влияет на итоговое значение. Если бит знака один, значение должно быть изменен одним из следующих способов:

- соответствующее значение со знаком бит 0 отрицается (знак и величина);

- знаковый бит имеет значение - (2N) (два дополнения);

- знаковый бит имеет значение - (2N - 1) (дополнение).

Какое из них применяется определенная реализация, равно как и значение со знаком бит 1 и все биты значений нуля (для первых двух), или со знаковым битом и всеми битами значений 1 (для одного дополнения), является ловушкой представление или нормальное значение. В случай знака и величины и дополнения, если это представление - это нормальное значение. называемый отрицательным нулем.

Ответ 4

0xFFFFFFFF = -1
0xFFFFFFFE = -2
0xFFFFFFFD = -3
... 

& так что

Ответ 5

Самый старший бит (последний бит слева) установлен для отрицательных чисел.

Ответ 6

Я думаю, что ответ 0110, предшествующий 1 повторному 28 раз, поэтому он выглядит так:

1111 1111 1111 1111 1111 1111 1111 0110;

Шаги:

  • представление битов для 10:

    0000 0000 0000 0000 0000 0000 0000 1010;

  • 0->1 и 1->0 для всех бит:

    1111 1111 1111 1111 1111 1111 1111 0101;

  • добавьте 1 к последнему биту и пропустите его до конца вперед!

    1111 1111 1111 1111 1111 1111 1111 0110;

===

Вы можете проверить, добавив его с 10, и вы получите 0 для всех бит. Как упоминалось выше, оно основано на 2 и следует за двумя дополнениями.