@alphasigma

Почему в Arduino int 2 байта, а не 4?

Привык что у всех языков int 4 байта и имеет размерность -2 147 483 648 до 2 147 483 647, но посмотрев документацию увидел что arduino имеет 2 байта и диапазон -32,768 to 32,767. Это как то связано с архитектурой процессора
  • Вопрос задан
  • 338 просмотров
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Дело не в языке, а в стандарте С++ (на котором основан ардуиновский Wiring), который предполагает тип int равный некоторому размеру, зависящему от целевой платформы:

Plain ints have the natural size suggested by the architecture of the execution environment


Причина - оптимальность размера типа для процессора.

С большой долей вероятности там отличаются размеры и остальных типов, включая указатели (void*).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега Arduino
Любые ответы на любые вопросы
Зря привыкли. Стандарт C++ регламентирует только минимальные диапазоны значений для типов , так что ардуинская реализация в стандарт прекрасно вписывается.

Хотите использовать типы гарантированной длины - используйте int32_t
Ответ написан
@vanyamba-electronics
Вычислительное ядро микроконтроллера имеет разрядность 8 бит. Поэтому все регистры, которыми микроконтроллер оперирует, либо 8-битные, либо 16-битные.
8-разрядное АЛУ, чтобы, например. сложить два числа использует 1 операцию для чисел типа uint8_t, либо две
операции для чисел типа unit16_t. Для чисел типа uint32_t потребуется 4 операции.
То же самое с операциями чтения-записи из памяти в регистры и в память.
То есть чтобы просто узнать, равна ли переменная int нулю, потребуется 4 операции? Это было бы странно.
Тип int - это главный тип в языке C. А в данном его стали бы использовать только в исключительных случаях.
Так что на 8- и 16-битных платформах размерность int 16 бит, на 32-битных - 32 бита, на 64-битных - 64 и т.д.
С типом char всё ещё запутаннее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы