Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;标准要求有符号整数只有一个符号位? 考虑C++的基本符号整数类型,即:符号char < /> >代码>短INT/COD> >代码> int >代码>长INT/COD> >代码>长long int /COD>,当前C++标准对其底层位表示有什么要求?_C++_C++11_Integer_Standards_Language Lawyer - Fatal编程技术网

C++;标准要求有符号整数只有一个符号位? 考虑C++的基本符号整数类型,即:符号char < /> >代码>短INT/COD> >代码> int >代码>长INT/COD> >代码>长long int /COD>,当前C++标准对其底层位表示有什么要求?

C++;标准要求有符号整数只有一个符号位? 考虑C++的基本符号整数类型,即:符号char < /> >代码>短INT/COD> >代码> int >代码>长INT/COD> >代码>长long int /COD>,当前C++标准对其底层位表示有什么要求?,c++,c++11,integer,standards,language-lawyer,C++,C++11,Integer,Standards,Language Lawyer,其位表示的约束是否规定其应包括: 可选填充位 强制值位 一种强制符号位,正值为0,负值为1 如果存在,则符号位应为最高有效位 这是真的吗?如果不是,那么警察是什么?我正在从标准中寻找证明或反驳这一点的引用 编辑:我问这个问题,因为在C语言中,标准说: 6.2.6.2.2: 对于有符号整数类型,对象表示的位应为 可分为三组:值位、填充位和符号 一点不需要任何填充位;签名字符不应具有 任何填充位。应正好有一个符号位。每一点 值位应与对象中的相同位具有相同的值 对应无符号类型的表示(如果存在M 有

其位表示的约束是否规定其应包括:

  • 可选填充位
  • 强制值位
  • 一种强制符号位,正值为
    0
    ,负值为
    1
  • 如果存在,则符号位应为最高有效位
这是真的吗?如果不是,那么警察是什么?我正在从标准中寻找证明或反驳这一点的引用

编辑:我问这个问题,因为在C语言中,标准说:

6.2.6.2.2:

对于有符号整数类型,对象表示的位应为 可分为三组:值位、填充位和符号 一点不需要任何填充位;签名字符不应具有 任何填充位。应正好有一个符号位。每一点 值位应与对象中的相同位具有相同的值 对应无符号类型的表示(如果存在M 有符号类型中的值位和无符号类型中的值位,然后是M≤ N ).如果符号位为零,则不应影响结果值。 如果符号位为1,则应在其中一个 以下方法:

  • 符号位为0的对应值为负数(符号和幅值)
  • 符号位具有该值−(2^M)(二者的补充)
  • 符号位具有该值−(2^M− 1) (补语)
以下哪一项适用于实现定义,如下所示 符号位为1且所有值位为零的值(对于 前两位),或带有符号位和所有值位1(用于“一”) 补码),是陷阱表示或正常值。在这种情况下 符号、大小和1的补码,如果这个表示是 正常值称为负零


所以我想知道C++中是否存在类似的东西,我猜你问的问题的答案是否定的

我认为C++标准指定了每个整数类型必须能够表示的最小值和范围。我认为该标准没有特别提到您列出的任何约束

我认为这些都是实施细节


< P>我觉得找到一个C++实现,使用一个以上的比特来保存符号,而不使用0的正值和1的负数,这将是很奇怪的。但我不认为C++标准特别要求它。

< p>我猜你问的问题的答案是“不”。

我认为C++标准指定了每个整数类型必须能够表示的最小值和范围。我认为该标准没有特别提到您列出的任何约束

我认为这些都是实施细节


< P>我觉得找到一个C++实现,使用一个以上的比特来保存符号,而不使用0的正值和1的负数,这将是很奇怪的。但我不认为C++标准特别要求它。

< P>标准是基于C++标准的,特别是在C(有2.2.6个整数类型)< /P>标准的情况下。 2对于有符号整数类型,对象表示的位 应分为三组:值位、填充位和 符号位。不需要任何填充位;签名字符不应 有任何填充位应该只有一个符号位


C++标准是基于C标准的,其中有(62.62个整数类型)< /P> 2对于有符号整数类型,对象表示的位 应分为三组:值位、填充位和 符号位。不需要任何填充位;签名字符不应 有任何填充位应该只有一个符号位


这是C++11关于有符号整数类型表示的说明:

C++11 N3337 3.9.1[basic.basic]第7页:

积分型的表示 应使用纯二进制计数系统定义值。49[示例:本国际标准允许整数类型的2补、1补和符号幅值表示。-结束 [示例]

脚注49内容如下:

49)使用二进制数字0和1的整数的一种位置表示法,其中由连续位表示的值是加法的,从1开始,然后乘以2的连续整数次幂,但可能最高的位除外 位置。(改编自美国国家信息处理系统词典。)


因此,C++允许与C一样的三个选项,以及满足脚注49的任何其他选项。这是C语言允许的超集。然而,根据脚注49,只有最高位才允许有特殊含义。

这是C++11关于有符号整数类型表示的说法:

C++11 N3337 3.9.1[basic.basic]第7页:

积分型的表示 应使用纯二进制计数系统定义值。49[示例:本国际标准允许整数类型的2补、1补和符号幅值表示。-结束 [示例]

脚注49内容如下:

49)使用二进制数字0和1的整数的一种位置表示法,其中由连续位表示的值是加法的,从1开始,然后乘以2的连续整数次幂,但可能最高的位除外 位置。(改编)