Самый простой способ получить ширину unsigned int
- это (sizeof(unsigned)*CHAR_BIT
).
РЕДАКТИРОВАТЬ: как отмечает pmg, вы должны знать о теоретической разнице между размером, который принимает unsigned
память и количество битов, доступных для вычислений.Ваш оригинальный код пытается вычислить последний, как и программа ниже.Приведенный выше трюк вычисляет пространство, занимаемое в памяти.
Не очень удобно вычислять это число с >>
, поскольку в C запрещено использовать >>
с числом, равным или превышающим размерв битах типа вы меняете.Вы можете обойти это, если знаете, что long long
строго больше, чем int
, вычисляя с помощью unsigned long long
:
unsigned machineword()
{
int i = 1;
unsigned temp=1;
while (temp > 0)
{
i++;
temp = (unsigned)(((unsigned long long)~(0U)) >> i);
}
return i;
}