根据C ++规范
A byte is at least large enough to contain any member of the basic
execution character set (2.3) and the eight-bit code units of the
Unicode UTF-8 encoding form and is composed of a contiguous sequence
of bits, the number of which is implementation defined.
这意味着字节中的位数必须为8位或大于8位。
现在,按照gcc,位数由ABI
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Characters-implementation.html#Characters-implementation
4.4个字符
字节中的位数(C90 3.4,C99和C11 3.6)。
由ABI决定
GCC基于ABI-http://itanium-cxx-abi.github.io/cxx-abi/
谁能指出我提到一个字节中位数的位置?
这确实取决于硬件(CPU)。我认为Itanium ABI不会针对没有8位字节的任何CPU。在某些平台上,可寻址最少的单元不是8位字节(通常是DPS),但除此之外,您必须去博物馆找到没有8位字节的计算机。
您在ABI上的网址可能有误。在x86-64 / Linux上,请参见github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf,通常,ABI是特定于目标平台的。我听说的大多数计算机都有8位字节。另请参阅utf8everywhere.org
@BasileStarynkevitch URL没错。实际上,通过引用ABI的方式,您给我们的PDF实际上是指向同一网站的链接(第9.1节)
我的意思是,ABI是特定于处理器的,并且它定义了char是什么。在奇怪的计算机上,char可能是24位。
我同意,并且根据C ++规范,char(一个字节)可以超过8位。感谢您的回答,现在我可以将点子联系起来并继续进行工作。
Can anyone point me to the location where the number of bits in a byte is mentioned?
从学上来说不是。该特定的ABI始终使用"字节"代替"八位字节";在现代时代,"字节"是"八位位组"的常见同义词,因为使用的绝大多数系统都具有8位字节。
它确实这样说:
In general, this document is written as a generic specification, to be usable by C++ implementations on a variety of architectures. However, it does contain processor-specific material for the Itanium 64-bit ABI, identified as such. Where structured data layout is described, we generally assume Itanium psABI member sizes.
安腾芯片都具有8位字节。
如果您使用的是其他芯片,并且每个字节具有不同的位数,并且找到了针对该芯片的编译器,那么您将拥有替代的答案。 (但这不是,您也没有。)
即使没有明确说明位和字节之间的关系,这里实际上也没有解释的余地??。
如果我感到特别偏执,我偶尔会写一个static_assert(CHAR_BIT == 8)。总的来说,除非您针对的是真正异国情调的东西,否则您可以依靠它。
If youre using some other chip, and it has a different number of bits per byte, and you found a compiler that targets said chip, then you have your alternative answer.在我正在做的工作中,这似乎很正确。
C ++标准(以及因此大多数编译器)仅有效地保证char至少为8个连续位。对于任何特定的编译,实际位数取决于目标CPU架构。
但是,在大多数情况下,您将必须尽力找到不具有8位字节的目标CPU。
如果必须编写依赖于8位字节假设的代码,则始终可以static_assert(CHAR_BIT == 8)防止任何违反您假设的编译。
> static_assert(CHAR_BIT == 8)这是最好的方法。 谢谢!!