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 标准浮点类型
有三种标准浮点类型,分别为float、double和long double。float类型的值集是double型值集的子集,double类型的值集是long double类型的值集的子集。
2.2 定点数类型
在即将发布的新标准中,增加了三种定点数类型,分别为_Decimal32、_Deicimal64和_Delicimal128。它们分别具有IEC 60559的decimal32、decimal64和decimal128格式。
注:IEC 60559规定decimal32为不需要算术支持的数据交换格式, 而_Decimal32是一种完全支持的算术类型。
2.3 实浮点类型
标准浮点类型和定点数类型统称为实浮点类型。
2.4 复数类型
有三种复数类型,分别是float _Complex、double _Complex和long double _Complex。
2.5 浮点数类型
实浮点数类型和复数类型统称为浮点类型。
3. 实类型、算术类型和基本类型
整数类型和实浮点类型统称为实类型(real types)。C能够处理的实类型数只是实数的一个有限子集。
整数类型和浮点数类型统称为算术类型(arithmetic types)。每个算术类型都属于一个类型域:实类型域包含实类型,复数类型域包含复数类型。
char类型、有符号和无符号整数类型以及浮点类型统称为基本类型(basic types)。
C语言基本概念----类型相关推荐
- 编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析
编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言概念辨析 转自:https://blog.csdn.net/u010533843/article/details/76215487 编译型和解 ...
- c语言的各种类型的指针,简单总结C语言中各种类型的指针的概念
2016 这篇文章主要简单总结了C语言中各种类型的指针的概念,指针可以说是C语言本身所具有的最大特性,平时根据不同使用场合习惯地将其简单分类,需要的朋友可以参考下 C语言中有很多关于指针的使用,指针也 ...
- 概念区别 【编译型语言与解释型语言、动态类型语言与静态类型语言、强类型语言与弱类型语言】
概念区别 [编译型语言与解释型语言.动态类型语言与静态类型语言.强类型语言与弱类型语言] 文章目录 一.编译型语言与解释型语言 二.动态类型语言与静态类型语言 三.强类型语言与弱类型语言 总结 一.编 ...
- python中动态语言静态语言的定义_作为程序开发,你所需要知道的编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的概念以及区别...
作为程序开发,你所需要知道的编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言的概念以及区别! 在各式各样的开发过程当中,我相信各位开发小伙伴在开发过程中并没有太关注什么是解释性语言和编译性语 ...
- c语言使用node类型指针,C语言利用 void 类型指针实现面向对象类概念与抽象
不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...
- 【Go语言】【14】GO语言的接口类型
1.什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的.怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭.睡觉等: inte ...
- c语言字符变量grade如何定义,c语言基础概念笔记
最近看到自己之前刚开始学习的时候记的一些笔记就稍微整理了一下 第一章 c语言注释 概念:给代码进行解释说明 作用:加强程序代码的可读性和维护性 /*:多行注释 //:单行注释 变量和基本数据类型 变量 ...
- java 注解 demo_JAVA语言注解概念使用及Demo讲解
本文主要向大家介绍了JAVA语言注解概念使用及Demo讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. java注解 概念 Java提供了一种原程序中的元素关联任何消息和任何元数据 ...
- 【14】GO语言的接口类型
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://qingkechina.blog.51cto.com/5552198/167511 ...
最新文章
- Windows Azure Platform Introduction (2) 云计算的分类和服务层次
- Hadoop记录-JMX参数
- PDF文件上载图标,与启用浏览器浏览允许后依然无法在浏览器打开PDF文件的解决方案...
- 3台廉价机器每秒写入2百万!Kafka为什么那么快?
- 初学Struts遇到的坑爹问题
- 可以分屏的软件_Mac上的分屏功能,让你办公更高效
- 三目运算符c语言吗,看看三目运算符?:到底是怎么回事
- L325 如何睡觉
- PIN/PAD Design in SoC - 2 (待续)
- IMF 自定义 IMFTimer、IMFTimerTask
- 运放输入偏置电流方向_运放中输入偏置电流和输入失调电流的区别??
- 计算机笔记本电脑加固态硬盘,笔记本固态硬盘,教您怎么给笔记本加固态硬盘...
- TCP协议格式和特点
- 艾美捷抗人IL-8 (CXCL8)单抗MT8F19说明书
- WebView重定向和回退栈的问题,goBack不会回退的问题
- Objective-C runtime机制(5)——iOS 内存管理
- python整形怎么切片_遥感影像切分切片
- 【云服务架构】什么是云原生应用?有哪些特点?来看看阿里云大学公开课给你答案
- cas66-71-7|1,10-菲啰啉有机配体/ 1,10-Phen/邻菲啰啉/邻二氮杂菲
- 如何用mac远程控制windows10