ISO/IEC 9899:2011 条款6.2.6——类型的表示
6.2.6 类型的表示
6.2.6.1 通用类型
1、所有类型的表示都是未指定的,除了在本小节所描述的之外。
2、除了位域(bit-field),对象由连续的一个或多个字节序列构成,这些字节序列的字节个数、次序以及编码方式要么被显式指定,要么由实现定义。
3、存储在无符号位域中以及unsigned char类型中的值应该使用一个纯粹的二进制表示法来表示。[注:使用二进制数字0和1的整数的一个按位表示]
4、任一其它对象类型的非位域对象中所存储的值由n * CHAR_BIT位组成,这里n是那个类型的一个对象的大小,用字节表示。该值可以被拷贝进类型unsigned char[n]的一个对象中(比如,通过memcpy);字节的结果集被称为值的对象表示。在位域中所存储的值由m位比特构成,这里m是用于位域的所指定的大小。对象表示为由在保持该对象的可寻址存储单元中位域所组成的m比特集。具有相同对象表示的两个值(除了NaN)比较为相等,但是比较为相等的两个值可能具有不同的对象表示。
5、某些对象表示不需要表示该对象类型的一个值。如果一个对象所存储的值具有这么一种表示,并且被一个左值表达式所读,该左值表达式不具有字符类型,那么该行为是未定义的。如果这么一个表示由一个修改该对象所有或任一部分的副作用产生,通过一个不具有字符类型的左值表达式,那么行为是未定义的。[注:从而,一个自动变量可以被初始化为一个陷阱表示,而不用引发未定义行为,但是该变量的值不能被使用,直到有一个合适的值存放在里面。]这么一个表示称为一个陷阱表示。
6、当一个值被存储在结构体或联合体类型的一个对象中,包括在一个成员对象中时,该对象表示的字节,对应于任意填充的字节,采用未指定的值。[注:从而,比如说结构体赋值不需要拷贝任何填充位。]一个结构体或联合体对象的值永远不是一个陷阱表示,即使该结构体或联合体对象的一个成员的值可能是一个陷阱表示。
7、当一个值被存放在联合体类型的一个对象的成员中时,那么不对应于那个成员但对应于其它成员的那个对象表示的字节取未指定的值。
8、一个操作符被应用于具有多种对象表示的一个值上,无论使用哪种对象表示都不应该影响结果的值。[注:对于具有相同有效类型T的对象x和y具有相同的值,当它们作为类型T的对象被访问时,但在其它上下文中具有不同的值。特别地,如果==为类型T而被定义,那么x == y并不暗示memcmp(&x, &y, sizeof(T)) == 0。此外,x == y并不需要暗示x和y具有相同的值;其它对类型T的值操作可能区分它们。]一个值被存放在使用一个具有多个对象表示的一个类型的一个对象中,使用哪种表示是未指定的,但不应该产生一个陷阱表示。
9、具有原子类型的对象的加载和存储用memory_order_seq_cst语义来实现。
6.2.6.2 整数类型
1、对于除了unsigned char以外的无符号整数类型,对象表示的比特位应该被划分为两个分组:值位与填充位(填充位可省)[译者注:比如对于一个包含位域的结构体,像struct { unsigned char a : 2; unsigned char b : 4; } s; 那么对象s具有8个比特(1个字节),前6比特为值位,后2比特为填充位]。如果有N个值的比特,那么每个比特应该表示一个不同的在1到2N-1之间的2的幂,以至于该类型的对象应该能够使用一个纯粹的二进制表示法来表示从0到2N-1的值;这将被称之为值表示。任何填充比特的值是未指定的。[注:填充比特的某些组合可能会产生陷阱表示,比如,如果一个填充比特是一个校验位。不管怎么样,在有效值上的算术操作都不会产生陷阱表示,除非作为异常情况的一部分,比如一个溢出,并且这不会随无符号类型发生。所有其它填充位的组合是由值比特所指定的值的可选的对象表示。]
2、对于带符号整数类型,对象表示的比特位应该被划分为三组:值位、填充位与符号位。填充位可缺省;signed char不应该有任一填充位。 符号位应该恰好有1位。对于值位的每个比特应该与相应无符号类型所表示的对象中的同一个比特具有相同的值(如果在带符号类型中有M值比特,而在无符号类型中有N值比特,那么M ≦ N)。如果符号位为0,那么它将不影响结果值。如果符号位为1,那么该值将以以下三种方式的其中之一被修改:
——相应于带有符号位0的值,取相反数(符号与量);
——符号位具有值-(2M)(2的补);
——符号位具有值-(2M - 1)(1的补);
应用上述三种方法的哪一个是由实现定义的,即作为带有符号位1的值并且所有值位都是0(对于前两种),还是符号位与所有位都是1(对于1的补),是一个陷阱表示还是一个正常的值。在符号与量以及1的补的情况下,如果这种表示是一个正常值,那么它被称为一个负0。
3、如果实现支持负零,那么它们将仅通过以下方式生成:
——对产生负零值的操作数使用&,|,^,~,<<以及>>操作符;
——使用+,-,*,/操作符,其中一个操作数为负零,并且结果为零;
——基于上述情况的复合赋值操作符。
这些情况实际生成一个负零还是一个正常的零是未指定的,并且当存储到一个对象中时,一个负零是否会变为一个正常的零也是未指定的。
4、如果实现不支持负零,那么对会产生这么一个值的操作数使用&,|,^,~,<<,和>>操作符的结果是未定义的。
5、任何填充位的值都是未指定的。[注:某些填充位的组合可能生成陷阱表示,比如,如果一个填充位是一个奇偶校验位。不管怎么说,对有效值进行算术操作不会产生一个陷阱表示,除非是一种异常情况的一部分,诸如一个溢出。填充位的所有其它组合是由值位所指定的值的可替换的对象表示。]一个带符号整数类型的一个有效(非陷阱)对象表示,这里符号位是零,是相应无符号类型的一个有效对象表示,并且将表示相同的值。对于任一整数类型,所有比特位都是零的对象表示应该是那个类型的零值表示。
6、一个整数类型的精度是它用于表示值所使用的比特位的个数,不包括任一符号位与填充位。一个整数类型的宽度是相同的,但包括任一符号位;因而对于无符号类型,两个值是相同的,而对于带符号类型,宽度比精度要大。
ISO/IEC 9899:2011 条款6.2.6——类型的表示的更多相关文章
- ISO/IEC 9899:2011 条款6.7.3——类型限定符
6.7.3 类型限定符 语法 1.type-qualifier: const restrict volatile _Atomic 约束 2.除了指针类型(其被引用的类型是一个对象类型)之外的类型,不应 ...
- ISO/IEC 9899:2011 条款6.7.8——类型定义
6.7.8 类型定义 语法 1.typedef-name: identifier 约束 2.一个typedef名指定了一个可变修改的类型,然后它应该具有语句块作用域. 语义 3.在一个声明中,该声明的 ...
- ISO/IEC 9899:2011 条款6.7.7——类型名
6.7.7 类型名 语法 1.type-name: specifier-qualifier-list abstract-declaratoropt abstract-declarator: po ...
- ISO/IEC 9899:2011 条款6.7.2——类型说明符
6.7.2 类型说明符 语法 1.type-specifier: void char short int long float double signed unsigned _Bool _Comple ...
- ISO/IEC 9899:2011 条款6.2.5——类型
6.2.5 类型 1.存储在一个对象中的值或由一个函数所返回的值的意义由用于访问该对象的表达式的类型来确定.(声明为一个对象的一个标识符是最简单的这种表达式:其类型在标识符的声明中指定.)类型被划分为 ...
- ISO/IEC 9899:2011 条款3——术语、定义与符号
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...
- ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...
- ISO/IEC 9899:2011 条款6.4.2——标识符
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier identifier-nondigit identifie ...
- ISO/IEC 9899:2011 条款6.4.3——通用字符名
6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...
随机推荐
- nginx的应用【虚拟主机】
Nginx主要应用: 静态web服务器 负载均衡 静态代理虚拟主机 虚拟主机 :虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配 ...
- Zabbix监控平台-----深入理解zabbix
一,Zabbix Web操作深入 (1)创建一个模版,所有的功能几乎都是在模版中定义的 点进新创建的模版查看,模版里几乎可以设定我们需要的所有功能 (2)在模版里创建应用集,应用集的作用就是将众多的监 ...
- Java学习笔记——第2篇
Java程序的基本规则 Java程序的组织形式:纯粹的面向对象的程序设计语言,所以Java程序必须以类的形式存在,类是Java程序的最小程序单位,Java程序不允许可执行语句.方法等成分独立存在,所有 ...
- unity和lua开发游戏常备技能
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 我的个人博客 一.使用制作滑动列表:使用UILayout做虚拟列表 ui.list = base:findcom(" ...
- leetcode刷题-1
小A 和 小B 在玩猜数字.小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜.他们一共进行三次这个游戏,请返回 小A 猜对了几次? 输入的guess数组为 小 ...
- P2002 消息扩散[SCC缩点]
题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息. 输入格式 第一行两个整数n,m表示n个城市, ...
- python 杂记-unittest
介绍单元测试的好文:https://mp.weixin.qq.com/s/njxc8GXSlc3z_RibK70ROg setUpModule/tearDownModule:在整个模块的开始和结束时被 ...
- Mysql 安装,及其闪退的问题解决
1.下载 Mysql 64下载链接(华军软件) http://soft.onlinedown.net/soft/3573.htm 2.安装 2.1 傻瓜式安装 不再赘述,略过. 2.2安装完成打开闪退 ...
- java上传超大文件
上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败. 一开始以为是session过期或者文件大小受系统限制,导致的错误.查看了系统的配置文件没有看到文件大小限制,web.xml中sees ...
- luogu P3386 【模板】二分图匹配
二次联通门 : luogu P3386 [模板]二分图匹配 /* luogu P3386 [模板]二分图匹配 最大流 设置源点,汇点,连到每条边上 跑一边最大流即可 */ #include <i ...