N位有符号整数的最大保证范围是多少?

时间:2019-06-27 09:34:30

标签: c++ standards bit theory signed

一些背景:

  • 在C ++ 20之前,C ++标准允许使用任何带符号的整数表示,并且N位带符号整数的最小保证范围为-(2^(N-1) - 1)+2^(N-1) - 1
  • C ++ 20标准提案(如@Sneftel所述)允许唯一表示范围从-2^(N-1)+2^(N-1) - 1的表示形式。
  • 据我了解,最小值-最大值的范围必须是连续的。

我试图找到N位有符号整数最大范围内的所有引号,但没有找到。

所以我想知道(就C ++而言):

  1. 假设N位有符号整数的最大可能范围从-2^(N-1)+2^(N-1)是正确的吗?会更宽吗?
  2. 它是否会受到底层平台位实现的影响-例如“ 3状态位”或类似的东西?

2 个答案:

答案 0 :(得分:3)

当前没有最终的C ++ 20标准。您可能想到的提案是P1236,它说:

  

有符号整数类型的可表示值范围是-2 ^(N-1)到2 ^(N-1)-1(含),其中N称为该类型的范围指数。

这既是最大值又是最小值。因为该提案要求带符号整数的二进制补码,所以没有机会进行修改。通常,N位不能用于表示超过2 ^ N个不同的值(通过信鸽原理),因此,即使仅将其指定为最小范围,该范围也要尽可能地大。

至于三态位,这些位不适用于该语言。

答案 1 :(得分:3)

C ++ 2a预计将成为C ++ 20标准,但目前尚不存在。

除此之外,尽管当前草案对有符号整数强制执行two's-complement representation,但当前标准(C ++ 17)和所有前驱版本均会进行限制选择
具体来说,提供的其他选项是signed magnitude representationones' complement。两者均具有负零

有关N位带符号整数的范围的信息。具体来说,不是所有对象表示的N 1 位都需要是the exception of the narrow character types表示的N 2 位的一部分。因此,值表示的N位宽度可能会更小。考虑到pigeonhole-principle,它变大就不足为奇了。

关于位是二进制的假设已深深地嵌入到该语言中,就像它遍及许多其他编程语言一样。改变那将是一个重大项目。