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
- 如果存在,则符号位应为最高有效位
- 符号位为0的对应值为负数(符号和幅值)李>
- 符号位具有该值−(2^M)(二者的补充)李>
- 符号位具有该值−(2^M− 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的连续整数次幂,但可能最高的位除外 位置。(改编)