在没有 sizeof() 的情况下计算 int 中有多少位
Calculate how much bits is in int without sizeof()
我正在尝试创建简单的游戏。任务是创建程序来计算 int 的大小。
他们的代码是
#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 是 4 个字节,所以我使用按位运算来移动位,它应该是 32,但我得到的是 1。如果有任何帮助,我将不胜感激。
拥有
x = 0;
while ((x>>1) != 0)
...
而立即停止,所以i不变,return值为0。
正确的方法是用~0u
初始化 x 使所有位的值为 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;
}
据我所知,signed/unsigned 没有任何问题。
EDIT 反映 ?项目的占位符要求。
我正在尝试创建简单的游戏。任务是创建程序来计算 int 的大小。 他们的代码是
#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 是 4 个字节,所以我使用按位运算来移动位,它应该是 32,但我得到的是 1。如果有任何帮助,我将不胜感激。
拥有
x = 0;
while ((x>>1) != 0)
...
而立即停止,所以i不变,return值为0。
正确的方法是用~0u
初始化 x 使所有位的值为 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;
}
据我所知,signed/unsigned 没有任何问题。
EDIT 反映 ?项目的占位符要求。