2015-01-03 2 views
0

Я прочитал, что компиляторы C должны выделить 2 байта для типа short и должны выделить 4 байта для типа long. Таким образом, в зависимости от системы тип int может иметь 2 байта или 4 байта. Итак, в чем его цель? Если нам понадобится 2 байта, мы можем использовать short, и если нам нужно 4-байтное число, мы можем использовать long. Мне кажется, что int похож на азартные игры, если система 16-бит или нет. (я вообще не понимаю, почему C не может самостоятельно решить, сколько памяти требуется для номера, как это делает Python)Каково использование типа int в C?

+3

«Компиляторы C должны выделять 2 байта для короткого типа и должны выделять 4 байта для типа long» - это неверно, единственное требование для размеров целых типов заключается в том, что 'sizeof (char) == 1' , Фактически, в моей системе 'long' является 64-битным. (** edit ** я ошибаюсь) – Adrian

+0

О, я прочитал это в своем учебнике .. – ClassicEndingMusic

+2

Возможно, вы захотите получить другой учебник – Adrian

ответ

2

В B, предком C, единственным типом был int. Это был размер «машинного слова», который, как правило, означает размер регистра 16 бит в 16-разрядной системе, 32 бита в 32-битной системе и т. Д. C просто сохранил этот тип. short и long были введены в качестве способов управления складским пространством, когда требуется меньшее или большее расстояние. Это имеет значение, когда доступная память ограничена: зачем выделять long, когда вы знаете, что значение никогда не будет превышать диапазон short?

Я вообще не понимаю, почему C не может решить сам по себе, сколько памяти требуется для номера, так же, как Python делает

Python решает это динамически, используя arbitrary-precision представление. C решает это статически и требует, чтобы он был указан программистом. Существуют статически типизированные языки, в которых аннотации типа не требуются, из-за type inference. Если вам нужны целые числа с произвольной точностью в C, вы можете использовать GMP, который предоставляет mpz_t и множество других типов и функций для арифметики произвольной точности.

+0

Я вижу. Спасибо за ответ! – ClassicEndingMusic

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