为什么我的字号是64位在下面的C代码中?
我有以下C中的for循环。我想知道为什么字大小是64位而不是32位为什么我的字号是64位在下面的C代码中?,c,C,我有以下C中的for循环。我想知道为什么字大小是64位而不是32位 #define WSIZE 8*sizeof(int) long pcount_for(unsigned long x) { size_t = i; long result = 0; for (i = 0; i < WSIZE; i++) { unsigned bit = (x >> i) & 0x1; result += bit; } re
#define WSIZE 8*sizeof(int)
long pcount_for(unsigned long x)
{
size_t = i;
long result = 0;
for (i = 0; i < WSIZE; i++)
{
unsigned bit = (x >> i) & 0x1;
result += bit;
}
return result;
}
#定义WSIZE 8*sizeof(int)
长pcount_(无符号长x)
{
尺寸t=i;
长结果=0;
对于(i=0;i>i)&0x1;
结果+=位;
}
返回结果;
}
int的大小取决于您机器的体系结构。
如果您是在32位上编译,它可能是4字节(因此8*4=32,这是您所期望的)
在AMD64上,您必须使用int32_t将其设置为4字节。因为
sizeof(int)
在您的系统上是8
。int
至少有16位长,但可能更长。没有上限。32位是常见的,但决不是必需的。应该使用#define WSIZE(CHAR\u BIT*sizeof(int))
-很可能是相同的答案,虽然向我报告了结果,但我使用测试函数运行了它,并执行了printf(“%d\n”,sizeof(int));在我的职责范围内。它仍然显示int的大小为4bytes@RR84这是一段来自学校讲座的示例代码,不是我写的。为什么需要甚至想要一个有符号的long
来计算无符号long
中设置为1
的数字位,但最多只能计算一个等于int
中字节数的数?那么,为什么首先要传递一个无符号long
?对于sizeof()
返回的size\u t
是%zd
,虽然%zu
会更好,因为size\u t
是无符号的
。对于大小
的裸%d
是未定义的行为“在AMD64上,必须使用int32将其设置为4字节”不,这取决于数据模型。在我的x86-64 linux系统上,sizeof(int)
是4。现在很少有64位int的体系结构