c语言中每个字节多少位,关于C ++:GCC编译器一个字节中有多少位

根据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)这是最好的方法。 谢谢!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值