我正试图创建一个简单的游戏。任务是创建一个程序,计算int的大小,以bites.他们的代码是。
#include <stdio.h>
int intSize(void)
{
unsigned int x,
i = 0;
x = ?;
while ((?) != 0)
?;
return ?;
}
int main()
{
printf("Size is %d bits\n",?);
return 0;
}
是我应该把我的代码放在哪里。
这是我的一个尝试
#include <stdio.h>
int intSize(void)
{
unsigned int x,
i = 0;
x = 0;
while ((x>>1) != 0)
i++;
return i;
}
int main()
{
printf("Size ise %d bits\n", intSize());
return 0;
}
我知道usigned int是4bytes,所以我用bitwise操作来移动位,它应该是32,但我得到1。我将感谢你的任何帮助。
拥有
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
我解决这个问题的方法是在整数的低位放一个1,然后移位。左边 直到它为零,这意味着该位的时钟一直在外面。
#include <stdio.h>
int intSize(void)
{
unsigned int x,
i = 0;
x = 1;
while ((x <<= 1) != 0)
i++;
return i+1;
}
int main()
{
printf("Size is %d bits\n", /*?*/ intSize());
return 0;
}
据我所知,没有担心signedunsigned的问题。
EDIT 以反映项目的? 占位要求。