Имея
x = 0;
while ((x>>1) != 0)
...
, в то время как немедленно останавливается, поэтому i не изменяется и возвращаемое значение равно 0.
Правильный путь должен был инициализировать x с ~0u
, чтобы все биты имели значение 1 (предположим, 2-дополнения)
Из-за этого тест не является правильным, и вы пропустили изменение значения x .
В
printf("Size ise %d bits\n", intSize);
вы пропустили () для вызова функции, в настоящее время вы пытаетесь напишите его адрес, я говорю, попробуйте, потому что адрес должен быть printf
в формате %p
.
Наконец:
#include <stdio.h>
int intSize(void)
{
unsigned int x,
i = 0;
x = ~0u;
while ((x & 1) != 0)
(i+= 1, x /= 2); /* not x >= 1 in case it is a rotate rather than a shift */
return (int) i;
}
int main()
{
printf("Size is %d bits\n", intSize());
return 0;
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -Wall s.c
pi@raspberrypi:/tmp $ ./a.out
Size is 32 bits
pi@raspberrypi:/tmp $
Итак, для того, чтобы '?' являются:
~0u
x & 1
(i+= 1, x /= 2)
(int) i