Как отрицательные числа представлены в 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 и следует за двумя дополнениями.