Диапазон типов int и long - PullRequest
       32

Диапазон типов int и long

2 голосов
/ 26 апреля 2010

Я узнал, что диапазон int и long для 32-битных окон:

signed int: -32767 to 32767
signed long: -2147483647 to 2147483647

почему int имеет тот же диапазон, что и тип long, как указано в msdn? http://msdn.microsoft.com/en-us/library/s3f49ktz%28VS.80%29.aspx

Ответы [ 5 ]

2 голосов
/ 26 апреля 2010

Ваша предпосылка неверна. int и long являются 32-разрядными в (обеих) 32- и 64-разрядных ОС Windows.

1 голос
/ 26 апреля 2010

точная длина не обязательна. Обязательным является то, что long не может быть меньше int.

http://www.faqs.org/docs/learnc/x401.html

0 голосов
/ 26 апреля 2010

При работе с двоичными представлениями целых чисел вы можете рассчитать максимальный диапазон типов данных со знаком на основе количества битов, используемых для представления данных, по формуле:

минимальное значение: -2 ^ (N-1) максимальное значение: 2 ^ (N-1) - 1

где N - количество бит.

По тем или иным причинам тип «подписанного целого», о котором вы говорите, представлен 16 битами, а «длинный подпись» представлен 32 битами.

Также обратите внимание, что диапазоны, которые вы разместили, кажутся неполными, обратите внимание, что диапазон 16-битного целого числа со знаком снижается до -32768, что на один ниже вашего опубликованного диапазона.

0 голосов
/ 26 апреля 2010

Полагаю, вы хотели написать это:

signed int: -2147483647 to 2147483647
...

Они одинаковы по совершенно историческим причинам. Стандарт C ++ не требует определенного размера для каждого типа, единственная гарантия между этими двумя типами заключается в том, что sizeof(int) <= sizeof(long).

0 голосов
/ 26 апреля 2010

Ваш int будет сравниваться с __int16, тогда как ваш long будет сравниваться с __int32.

Вам нужно взглянуть на столбец Bytes , чтобы получить больше смысла.

...