Переменные типа int якобы являются «одним машинным словом в длину», но во встроенных системах компиляторы C для 8-битного микро-использования должны иметь int из 16 бит !, (8 бит для unsigned char), а для большего количества бит int ведет себя нормально. : в 16-битном микросхеме int тоже 16 бит, а в 32-битной микросхеме int - 32 бита и т. д.
Итак, есть ли стандартный способ проверить это, например, BITSIZEOF (int)?
как "sizeof" для байтов, но для битов.
это была моя первая идея
register c=1;
int bitwidth=0;
do
{
bitwidth++;
}while(c<<=1);
printf("Register bit width is : %d",bitwidth);
Но он принимает c как int, и в 8-битных компиляторах обычно используется int как 16 бит, поэтому в результате получается 16. Кажется, нет стандарта для использования int в качестве «ширины регистра» (или это не так. уважаемый)
Почему я хочу это обнаружить? Предположим, мне нужно много переменных, для которых требуется менее 256 значений, поэтому они могут быть 8, 16, 32 битами, но использование правильного размера (такого же, как память и регистры) ускорит работу и сэкономит память, и если это невозможно решил в коде, я должен переписать функцию для каждой архитектуры
ИЗМЕНИТЬ. Прочитав ответы, я нашел эту хорошую статью.
http://embeddedgurus.com/stack-overflow/category/efficient-cc/page/4/
Приведу заключение (выделено жирным шрифтом)
Таким образом, суть в следующем. Если вы хотите начать писать эффективный переносимый встроенный код, первый шаг, который вам следует сделать, - это начать использовать типы данных C99 «минимально» и «быстро». Если ваш компилятор не совместим с C99, жалуйтесь, пока он не станет - или смените поставщика. Если вы внесете это изменение, я думаю, вы будете приятно удивлены улучшениями в размере кода и скорости, которые вы достигать.