Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
C 比long-long大的位字段?_C_Data Structures - Fatal编程技术网

C 比long-long大的位字段?

C 比long-long大的位字段?,c,data-structures,C,Data Structures,是否可以声明非常大的数字位字段,例如 struct binfield{ uber_int field : 991735910442856976773698036458045320070701875088740942522886681; }wordlist; 我只是想澄清一下,我并不是想用256bit来表示这个数字,这就是我想要使用的位数。或者我的计算机中没有那么多位?C不支持任意大小的数字数据类型。您只能使用编译器提供的整数大小,当您希望代码可移植时,最好坚持标准化类型的char(8位

是否可以声明非常大的数字位字段,例如

struct binfield{
    uber_int field : 991735910442856976773698036458045320070701875088740942522886681;
}wordlist;

我只是想澄清一下,我并不是想用256bit来表示这个数字,这就是我想要使用的位数。或者我的计算机中没有那么多位?

C不支持任意大小的数字数据类型。您只能使用编译器提供的整数大小,当您希望代码可移植时,最好坚持标准化类型的
char
(8位)、
short
(16位)和
long
(32位)和
long
(64位)的最小保证大小

但是您可以做的是创建一个
char[]
。字符总是至少为8位(除了在一些非常奇特的平台上,字符也不超过8位)。因此,您可以使用char数组来存储尽可能多的位值,只要您能够提供内存。但是,当您想使用字符数组作为位字段时,需要一些样板代码来访问正确的字节

例如,要获取字符数组的位
n
的值,请使用

bitfield[n/8] >> n%8 & 0x1

地球上所有的计算机中没有那么多位。@interjay世界上所有的计算机都没有超过256位吗?@Philipp世界上所有的计算机都没有9917359104428569767736980364580458045320070701875088740942522886681位。要扩展到@interjay,如果每一位都存储在一个氢原子中,这台假想的计算机的重量是太阳质量的827651.5倍。有一些历史平台的
char
不是8位,而且规范没有规定
char
必须是8位。然而,
sizeof(char)
将始终为您提供
1
,无论
char
中的位数是多少。为了添加到@JoachimPileborg的注释中,以防您担心非8位
char
的可能性很小:C标准规定
char
将始终至少为8位,而
char
中的位数在
char\u BIT
宏中提供(来自
limits.h
)。POSIX确实指定了
CHAR\u BIT
正好是8。CHAR技术似乎是正确的方法,尽管我意识到存储可能需要一段时间才能赶上摩尔定律