C++ 为什么在C+中对位集使用字符数组而不是int+;

C++ 为什么在C+中对位集使用字符数组而不是int+;,c++,bitset,C++,Bitset,对于我正在进行的项目,我需要为位集创建自己的实现。我看了一下STL库,看看他们是如何处理这个问题的,并在网上看了一些其他的东西。似乎使用字符数组是相当标准的。为什么每个人都使用字符数组而不是整型?< p>因为C++中的 char 是一个字节,(或者至少,它是由C++标准保证的,小于或等于大小,以 int 或短 >,而 int 的大小通常大于字节。(现在大多数机器上通常是32位或4字节。)由于单个字节是计算机可以处理的最小可寻址数据单元,因此在处理单个位时使用chars数组是很自然的。例如,如果您

对于我正在进行的项目,我需要为位集创建自己的实现。我看了一下STL库,看看他们是如何处理这个问题的,并在网上看了一些其他的东西。似乎使用字符数组是相当标准的。为什么每个人都使用字符数组而不是整型?

< p>因为C++中的<代码> char <代码>是一个字节,(或者至少,它是由C++标准保证的,小于或等于大小,以<代码> int <代码>或<代码>短<代码> >,而<代码> int <代码>的大小通常大于字节。(现在大多数机器上通常是32位或4字节。)由于单个字节是计算机可以处理的最小可寻址数据单元,因此在处理单个位时使用
char
s数组是很自然的。例如,如果您使用
int
,那么对于不是
sizeof(int)
倍数的任何位数,您都会浪费大量空间,但是对于字节数组,您浪费的空间可能最少。

字符(通常)是微处理器可以操作的最小位单位。如果您正在创建一个可以使用任意位数的对象,那么使用最小单位的数组是有意义的。这样,您总是使用尽可能少的单位


如果需要非任意大小的位集,并且处理器的本机类型足够大,可以包含它,请使用N位类型。它将比数组更有效。

我记得
经常使用无符号字符。这只是一个字节。只是出于好奇:为什么不是代码> STD::BuSETSE//>或“代码> Boo::DycimixBITSET 适合?对于 STD::BITSET ,GCC和VC++都使用了一个数组<代码>未签名的长< /COD>。事实上,Car、Char char和unChar Car被C++标准保证为一个字节。虽然实现定义了多少位:)当然,“字节”的定义并不总是8位。我曾经为一个8位PIC编写过C,其中char是4位(字节),int是8位(两个字节)。@Tergiver:C显然不是您使用的语言,因为4位和8位都不足以分别定义标准定义的
char
int
类型。是的,有符号的char和unchar字符被保证为C++标准的一个,但是它们将字节定义为char的大小。所以C++字节可以是12位…