Я читал, что компиляторы C должны выделять 2 байта для типа short и должны выделять 4 байта для типа long. Итак, в зависимости от системы тип int может иметь 2 или 4 байта. Итак, какова цель этого? Если нам нужно 2-байтовое число, мы можем использовать short, а если нам нужно 4-байтовое число, мы можем использовать long. Я чувствую, что int похож на азартную игру, независимо от того, 16-битная система или нет. (Я вообще не понимаю, почему C не может сам решить, сколько памяти нужно для числа, как это делает Python)
Какая польза от типа int в C?
Ответы (1)
В B, предке C, единственным типом был int
. Это был размер «машинного слова», то есть размер регистра — 16 бит в 16-битной системе, 32 бита в 32-битной системе и так далее. C просто сохранил этот тип. short
и long
были введены как способы управления пространством для хранения, когда требовалось меньше или больше диапазона. Это важно, когда доступная память ограничена: зачем выделять long
, когда вы знаете, что значение никогда не превысит диапазон short
?
Я вообще не понимаю, почему C не может сам решить, сколько памяти нужно для числа, как это делает Python
Python решает это динамически, используя представление произвольной точности. C решает это статически и требует, чтобы это было указано программистом. Существуют статически типизированные языки, в которых аннотации типов не требуются из-за выведения типов. Если вам нужны целые числа произвольной точности в C, вы можете использовать GMP, который предоставляет mpz_t
и множество других типов и функций. для арифметики произвольной точности.
sizeof(char) == 1
. На самом деле в моей системеlong
64-битная. (изменить я ошибаюсь) - person Adrian   schedule 04.01.2015char
может быть чем угодно, кроме 8 бит. - person Deduplicator   schedule 04.01.2015short
должно быть не менее 16 бит,int
не менее 16 иlong
не менее 32. См. типы данных C или стандартный. - person Jon Purdy   schedule 04.01.2015int
не является хорошей идеей. Но это реализовано таким образом, и мы не можем изменить это сейчас. - person i486   schedule 04.01.2015CHAR_BIT == 8
. - person Jon Purdy   schedule 04.01.2015int
не тот размер, с которым система может выполнять операции быстрее всего. При указании размера int важныint8_t
,int16_t
и т. д. изstdint.h
- person Forss   schedule 04.01.2015int
является переносимость программного обеспечения. Вы определяетеint
и получаете оптимальный размер на разных платформах. НО это причина тысяч ошибок. Если вы считаете, что стандартный тип должен иметь переменный размерint
и использовать определение типаint32_t
- могу сказать: почему бы не наоборот?int32
может быть встроенным типом, и вы можете определить переносимыйint
вstdint.h
. (Это нельзя изменить сейчас, но это может быть реальностью.) - person i486   schedule 04.01.2015CHAR_BIT
stackoverflow.com/questions/2098149/ некоторые другие странные архитектуры сCHAR_BIT != 8
также являются используется - person phuclv   schedule 04.02.2015