C语言数据类型

一、基本类型

基本类型的值不可以再分为其他类型。

整型

1.整型数据

在程序中根据各种前缀来区分各种进制数,若数超过了范围,则用长整型来表示,即后缀用L或l来表示。
(1)二进制
17到18世纪的德国数学家莱布尼茨首次提出了二进制计数法。二进制技术只需要0和1两个符号,不需要其他的符号。
(2)八进制
Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。
(3)十进制
十进制数没有前缀。
(4)十六进制
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或af)表示,其中:AF表示10~15,这些称作十六进制数字。十六进制以0x或0X表示。
十进制转二进制
十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依次步骤直至商为0。
在这里插入图片描述
二进制与八进制
3位二进制数按权展开相加得到1位八进制数,三位二进制转成八进制是从右至左开始转换,不足时补0。
将每个八进制数改为二进制数,不足时在最左边补0。
在这里插入图片描述
二进制与十六进制
4位二进制数按权展开相加得到1位十六进制数,从右至左开始转换,不足时补0。
将每个十六进制数转为4个二进制数字,不足时在最左边补0。
在这里插入图片描述

2.整型变量

整型变量分为基本型,短整型,长整型,无符号型四种。
在计算机中数值以补码的形式存储。补码:(1)正数的补码原码相同;(2)负数的补码:将该数绝对
值的二进制形式按位取反再加1。
在这里插入图片描述
基本型:类型说明符为int,在内存中占4个字节;
短整型:类型说明符为short int 或short,所占字节和取值范围与基本型相同;
长整型:类型说明符为long int或long,在内存中占4个字节;
无符号型:类型说明符为unsigned。
定义:类型说明符 变量标识符,变量名标识符。在内存中存储的形式:
在这里插入图片描述

字符型

字符型分为字符常量、字符串常量、字符变量、转义字符四种。
每个字符变量被分配一个字节的内存空间,字符值以ASCII码的形式存放在变量的内存单元中[65-90:A-Z;97-122:a-z;48-57:0-9]。

1.字符常量

字符常量即单引号括起来的一个字符。字符常量定义时需注意:
(1)字符常量只能用单引号括起来;
(2)字符常量只能是单个字符,不能是字符串;
(3)字符可以是任意字符,但是数字被定义为字符型之后就不能参与数值运算。

2.字符串常量

字符串常量即由双括号引起来的字符序列。
字符串常量可以含一个或多个字符;可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量(可以char c=‘c’,不能char c=“c”);字符常量占一个字节的内存空间。字符串常量占的内存等于字符串中字节数加1,增加的一个字节中存放字符“\0”,ASCII码为0,这是字符串结束的标志。

3.字符变量

字符变量用来存储字符常量,即单个字符,类型说明符为char。

4.转义字符

转义字符以反斜线\开头,后跟一个或几个字符。
在这里插入图片描述

实型

实型即浮点型,有单精度型(float)、双精度型(double)、长双精度(long double)三种。
实型一般占4个字节,按指数形式存储[小数部分占的位数越多,数的有效数字越多,精度越高;指数部分占的位数越多,则能表示的数值范围越大]。
在这里插入图片描述
在c语言中,实数只采用十进制(十进制小数形式,指数形式:由十进制数,加阶码e或E以及阶码组成aEn)实型数据有舍入误差。
在这里插入图片描述

数据类型转换

数据类型转换分为两种:(1)自动转换;(2)强制转换

1.自动转换

转换规则:
(1)若参与运算量的类型不同,则先转换为同一类型,然后进行运算; (2)转换按照数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int转成long在运行 ;
(3)所有浮点运算都是以双精度进行的,即使含有float单精度量运算的表达式,也是先转换成double型,在做运算;
(4)char型和short型运算时,必须先转换成int型; (5)在赋值运算中,赋值号两变量的数据类型不同时,赋值号号右边量的类型转换为左边量的类型。若右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按照四舍五入向前舍入。
下图表示了类型自动转换的规则。
在这里插入图片描述

2.强制类型转换

强制类型转换是通过类型转换运算来实现的。
一般形式为:
(类型说明符)(表达式)
其功能是把表达式的运算结果强制转换为类型说明符所表示的类型。
例如:
(int)(x+y) 把x+y的结果转换为整型
使用强制转换时需注意的问题:
(1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如(int)x+y是把x转换为整型后再与y相加;
(2)无论是强制转换还是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时转换,而不改变数据说明时对该变量定义的类型。

二、指针类型

一种特殊的、重要的数据类型。其值用来表示某个变量在内存储器中的地址。

三、构造类型

构造类型是根据已定义的一个或多个数据类型用构造的方法来定义。一个构造类型的值可以分为若干个成员或元素。每个成员都是一个基本数据类型或一个构造类型,主要分为数组类型、结构体类型、共用体类型三种。

枚举类型

枚举类型是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。
在C语言等计算机编程语言中,它是一种构造数据类型。枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。在C++、java、C#等语言中,枚举类型是一种基本数据类型而不是构造数据类型。
使用格式:枚举类型放在窗体模块、标准模块或共用模块中的声明部分,通过enum语句来定义。
格式:[public|private] enum name
membername[=constantexpression]
membername[=constantexpression]
……
End enum
public:表示该枚举类型在整个工程中都是可见的(缺省的)。
private:表示枚举类型只在所声明的模块中是可见的。Name: 枚举类型的名称。必须是一个合法的VB标识符,在定义该枚举类型的变量或参数时用该名称来指定类型。
Membername:指定该枚举类型的组成元素名称。
Constantexpression:枚举类型的组成元素的值。如果没有指定具体值,则所有赋的值或者是0或者比其直接前驱的值大1。元素的值也可以是别的enum类型。VB中将枚举中的元素的值按长整数处理。如果将一个浮点数值赋给一个枚举中的元素,VB会将该值取整为最接近的长整数。

四、空类型

有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为“空类型”,类型说明符为void。