2015-09-11 3 views
1

Интенсифицированный int32 представлен в памяти компьютера размером 4 байта (32 бит).Вычислимый размер целого

Итак, 32 бита имеют 1 знаковый бит и 31 бит данных. Но если 1-й бит начинается с 2^0, то 31-й бит должен иметь 2^30, а последний бит - это, конечно, бит знака.

Каким образом это целое число простирается от -2^31 до (2^31) -1?

+4

Прочитать wikipage на [дополнение к двум] (https://en.wikipedia.org/wiki/Two%27s_complement) –

+1

... и вот ссылка SO для [дополнения двух] (http://stackoverflow.com)/questions/1049722/what-is-2s-supplement) – Blastfurnace

+0

Существует пояснение для 8 бит в wikipedia. См. «Некоторые специальные номера для заметок» по адресу https://en.wikipedia.org/wiki/Two%27s_complement#Why_it_works –

ответ

1

Итак, 32 бита имеют 1 знаковый бит и 31 бит данных.

№. Большинство платформ используют two's complement для представления целых чисел.

Это позволяет избежать двойного нуля (+ - 0) и вместо этого расширяет диапазон отрицательных чисел на 1. Основное преимущество заключается в арифметике: многие операции, такие как сложение и вычитание, могут просто игнорировать знак.

+3

Я бы не сказал «нет»: даже в представлении дополнений 2 официальная терминология по-прежнему остается 1 знаковым битом и 31 битом значения. Разница между дополнением 2 и другими представлениями - это значение битов значения в случае, когда бит знака установлен. –

+0

ОК, может быть, * нет * слишком суровый. Во всяком случае, я хотел пояснить, что это ядро ​​путаницы OP: это не знаковый бит, который просто инвертирует значение остальных бит. –

+0

@ M.M. Выражение «бит знака» и «биты значений» неточно. Истинный битовый знак изменит значение других битов, как в плавающей точке, где это означает «изменить значение, представленное другими битами от положительного к отрицательному». Но это не так, как с дополнением 2s. Значение номера дополнения N-бит 2s представляет собой сумму значений, представленных каждым из его 1 бит: бит 0 стоит 1, бит 1 стоит 2, бит 2 стоит 4, ... пока вы не получите бит N-1, который стоит _minus_2^(N-1). Бит высокого порядка не изменяет значения других, он просто добавляет его значение к их сумме. –

1

int32 имеет ровно 32 бита и может содержать 2^32 разных значения.

В беззнаковой форме они будут 0 -> (2^32) -1.
В подписанной форме они будут -2^31 -> (2^31) -1. Обратите внимание на то, что:

(0 - (-2^31)) + ((2^31) -1 - 0) =
2^31 + 2^31 - 1 =
2 * 2^31 - 1 =
(2^32) - 1

Точно такой же диапазон.

Смежные вопросы