Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的字号是64位在下面的C代码中?_C - Fatal编程技术网

为什么我的字号是64位在下面的C代码中?

为什么我的字号是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

我有以下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;
   }
   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的体系结构