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技术似乎是正确的方法,尽管我意识到存储可能需要一段时间才能赶上摩尔定律