当前位置:   article > 正文

C语言基本概念----类型_c语言类

c语言类

本文来源微信公众号文章点击进入

存储在对象中的值或由函数返回的值,其含义由访问它的表达式的类型决定。声明为对象的标识符是最简单的表达式,其类型就是声明时为标识符指定的类型。类型(types)分为对象类型(描述对象的类型)和函数类型(描述函数的类型)。在翻译单元内的不同点上,对象类型可能是不完整(缺乏足够的信息来确定该类型对象的大小)或完整(具有足够的信息)。

注:类型可以在整个翻译单元中不完整或完整,也可以在翻译单元内的不同点更改状态由不完整类型变为完整类型。

1. 整数类型

1.1 bool类型

该类型的关键字在C99、C11、C17等标准中是_Bool,在即将发布的最新版本中是bool,我们用最新的关键字表示此类型。

bool类型和无符号整数类型都是标准无符号整数类型。该类型的变量取值为false或true,表示假和真,其长度(占用的字节数)取决于C实现,至少是1个字节。

1.2 字符类型

char、signed char和unsigned char这三种类型统称为字符类型。char类型与signed char类型还是unsigned char类型具有相同的取值范围、表示和行为,这要取决于具体的实现。在gcc中,char类型与signed char类型的行为一致。尽管如此,我们一般不会说char类型就等同于signed char 类型。

声明为char类型的对象足够大,可以存储基本执行字符集的任何成员。如果基本执行字符集的一个成员存储在char对象中,则其值保证为非负。如果char对象中存储了任何其他字符,则生成的值由实现定义,但应在该类型中可以表示的值范围内。

《C Primer Plus 第6版(中文版)》对char类型的描述:char类型用于储存字符(如,字母或标点符号),但是从技术层面看,char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。美国最常用的编码是ASCII编码,本书也使用此编码。例如,在ASCII码中,整数65代表大写字母A。因此,储存字母A实际上储存的是整数65。

标准ASCII码的范围是0~127,只需7位二进制数即可表示。通常,char类型被定义为8位的存储单元,因此容纳标准ASCII码绰绰有余。某些系统,比如许多IBM的大型主机使用了另一种编码——EBCDIC码,但也在8位的表示范围之内。另外,一些国家的计算机系统可能使用他们国家自定义的编码。一般而言,C语言会保证char类型足够大,以储存系统(实现C语言的系统)的基本字符集。

许多字符集都超过了127,甚至多于255。例如,日本汉字(kanji)字符集。商用的统一码(Unicode)创建了一个能表示世界范围内多种字符集的系统,目前包含的字符已超过110000个。国际标准化组织(ISO)和国际电工技术委员会(IEC)为字符集开发了ISO/IEC 10646标准。统一码标准也与ISO/IEC 10646标准兼容。

1.3 标准整数类型

有5种标准的有符号整数类型,分别是signed char, short int, int, long int和long long int。

有6种标准无符号整数类型,分别是unsigned char、unsigned short int、unsigned int、unsigned long int、unsigned long long int和bool。

标准有符号整数类型和标准无符号整数类型统称为标准整数类型

思考:char属于标准整数类型吗?

1.4 扩展整数类型

在某些C实现中定义了自己的有符号整数类型和无符号整数类型,一般称这些实现自定义类型为扩展有符号整数类型扩展无符号整数类型,统称为扩展整数类型

1.5 位精度整数类型

在即将发布的最新C标准中定义了位精度整数类型。位精度整数变量有无符号位精度整数类型有符号位精度整数类型

有符号位精确整数类型类型说明符为 _BitInt(N) ,其中N是整数常量表达式,指定用于表示该类型的位数,包括符号位。N的值不同则表示不同的类型。无符号位精确整数类型类型说明符为 unsigned _BitInt(N)。

1.6 枚举类型

枚举由一组命名的整数常量值组成。每个不同的枚举构成不同的枚举类型。每个枚举类型应与字符、有符号整数类型或无符号整数类型兼容。枚举类型的选择由实现定义,但应能够表示枚举的所有成员的值。枚举类型是不完整类型,直到枚举声明列表的结束,即遇到“}”之后,枚举类型才是完整类型。

1.7 有符号整数类型和无符号整数类型

对于每种有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字unsigned指定),该类型使用相同的存储量(包括符号信息),并且具有相同的对齐要求。

标准有符号整数类型位精度有符号整类型扩展有符号整型统称为有符号整数类型

标准无符号整数类型、位精度无符号整数扩展无符号整数统称为无符号整数类型。

1.8 整数类型

char类型有符号无符号整数类型以及枚举类型统称为整数类型

2. 浮点数类型

众所周知,浮点数据类型用于近似地表示某个具体范围内的实数。浮点运算得到的结果也只是一种近似结果。因此凡是需要精确记数的场合,都不应该使用浮点类型。并且在绝大多数情况下也不应该对浮点类型数据进行==、!=、<=、>=这样的运算。因为既然浮点数本身是一种近似表示,那么多数情况下做这种精确的等于比较是没有意义的。

另外,实数是一个数学概念,它包括有理数和无理数,有理数中又包括整数和分数,显然浮点数无法表示无理数和所有的小数,例如无法表示无限循环小数,也无法表示大于0.1小于0.2之间的所有实数。

2.1 标准浮点类型

有三种标准浮点类型,分别为floatdoublelong doublefloat类型的值集是double型值集的子集,double类型的值集是long double型的值集的子集。

2.2 定点数类型

在即将发布的新标准中,增加了三种定点数类型,分别为_Decimal32_Deicimal64_Delicimal128。它们分别具有IEC 60559的decimal32、decimal64和decimal128格式。

注:IEC 60559规定decimal32为不需要算术支持的数据交换格式, 而_Decimal32是一种完全支持的算术类型。

2.3 实浮点类型

标准浮点类型和定点数类型统称为实浮点类型

2.4 复数类型

有三种复数类型,分别是float _Complexdouble _Complexlong double _Complex

2.5 浮点数类型

实浮点数类型和复数类型统称为浮点类型

3. 实类型、算术类型基本类型

整数类型实浮点类型统称为实类型(real types)。C能够处理的实类型数只是实数的一个有限子集。

整数类型浮点数类型统称为算术类型(arithmetic types)。每个算术类型都属于一个类型域:实类型域包含实类型复数类型域包含复数类型

char类型有符号无符号整数类型以及浮点类型统称为基本类型(basic types)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/518946
推荐阅读
相关标签
  

闽ICP备14008679号