【问题标题】:What part of integer bit-representation is part of The Standard? [duplicate]整数位表示的哪一部分是标准的一部分? [复制]
【发布时间】:2015-04-19 21:46:01
【问题描述】:

关于整数在内存中的表示可以假设多少?

将整数切片和拼接在一起的可移植方式是按位操作吗?

【问题讨论】:

  • 无 - C/C++ 不处理基本类型的硬件/系统表示。
  • @DieterLücking 谢谢!
  • @DieterLücking:这并不完全正确。首先,没有“C/C++”语言;这两种语言非常相似,但并不完全相同。 C standard(即 N1570 草案)在第 6.2.6.2 节中讨论了整数类型的表示,并进行了相当多的细节。 C++ 标准中可能有类似的东西,但我没有检查。
  • @Cyber​​:这不是那个问题的重复,它只讨论整数类型的大小,而不是它们的表示。

标签: c++ bit-manipulation


【解决方案1】:

C standard 在 6.2.6.2 节中讨论了整数类型的表示。

它指定整数类型的二进制表示。对于无符号类型,位分为值位填充位。填充位对值没有贡献;不需要任何填充位。对于有符号类型,只有一个符号位。有符号类型可以使用符号和幅度二进制补码一个补码(二进制补码在现代系统中几乎是通用的)来表示。

位的顺序以及填充位的存在和数量是实现定义的。 (大多数现代实现没有填充位)。

C99 中引入了填充位的概念,以及对三种规范表示的限制。

按位运算符(<<>>& 等)是根据构成操作数值表示的位来定义的,但对表示的要求足够具体,以至于这在大多数情况下是明确的。 <<>>移位操作符的描述具体说,例如E1 << E2的结果是E1×2E2;请参阅引用的 N1570 草案的第 6.5.7 节。

C++ 标准有一个非规范性注释,表示它允许整数类型的 2 的补码、1 的补码和带符号的幅度表示,但似乎没有明确声明不允许其他表示。它确实要求“整数类型的表示应使用纯二进制计数系统定义值。”。您可以在 C++ 标准的N4296 working draft 中看到血腥的细节(或在任何其他草案中,或者如果您有副本,则在标准本身中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多