我们今天来详细地了解一下有关数据类型的知识。
数据类型
位与字节
位——计算机中的最小存储单位
字节——计算机中的基本存储单位
1字节=8位
整型
在C语言中,整型类型就是用于存放整数数值
我们先来看看整型类型的具体分类:
在C语言中,整型分为:
长整型(long int,缩写long);基本整型(int);短整型(short int,缩写short)。
接下来,我们再来看看整型类型在计算机中的存储:
int型数据的内存长度与系统平台相关,通常int型数据为机器的一个字节。
例如:在VC中规定int型数据占用4个字节,32位。
整型数据在计算机中是以二进制补码的形式存储的。
我们以整型数据123和-123来说明:
整型数123在计算机内存中的存储形式为:
整型数-123在计算机内存中的存储形式为:
其中,S是符号位。0代表正数,1代表负数。
最后,我们来看看整型类型的另一种分类
整型还分为:
有符号类型(signed),无符号类型(unsigned)。
其中signed书写时可以省略,例如:int表示带符号整型,unsigned int(unsigned)表示无符号整型。
由于最高位是数值位,所以无符号整型比有符号整型的正数范围大一倍。
例如:有符号短整型能存储的最大值为215-1,即32767,最小值为-32768;无符号短整型能存储的最大值为216-1,即65535,最小值为0.
一般地,由于计算机处理整型速度快,因此若运算不涉及小数,就尽量选用整型。
我们知道不同的数据类型规定了不同的机器数长度,决定了对应数据的数值范围,当一个整数超出次范围时计算机会将其转换为在数值范围内所允许的一个数,称为整型数的溢出处理。
由此,我们可以知道,在计算机中,数据的溢出是一个很大的问题。
一般来说,超过最大值的有符号整型数值(正数)会向上溢出变成负数。
(一个正数突然变成了负数,这听起来是不是有些匪夷所思,但在却是实实在在发生在计算机中的)
因此,在实际编程中要根据实际合理的选择整型类型,避免运算结果值超出数值范围发生溢出,产生不可预知的计算结果。
浮点型
C语言的浮点类型可以表示一个小数
数学中的实数在计算机中称为浮点数,是指小数点不固定的数。浮点数用二进制表示,但是表示方法比整数复杂得多。
首先我们来看看浮点型的分类
在C语言中,浮点型分为:
单精度浮点型(float);双精度浮点型(double);长双精度浮点型(long double)
然后我们来看看浮点型具体在内存中占用几个字节吧!
按二进制数据形式:
单精度格式具有24位有效数字,总共占用32位,占用4个字节;
双精度格式具有53位有效数字,总共占用64位,占用8个字节。
接下来,我们来看看浮点型在计算机中是如何存储的
浮点型数据在计算机内存中的存储方式是按照IEEE754浮点数标准处理,不同于整型数据那样直接以二进制表示。
关于计算机中浮点数存放方式的简单说明:浮点数=符号位+指数位+尾数位
(浮点数是一个近似值,尾数部分可能丢失,造成精度损失)
按IEEE754的规定,浮点数使用下列形式的规格化表示:
规格化数=(-1)s * 2E *1.f
其中s为符号,E为指数,f为小数。
单精度浮点数存储格式:
浮点数的两种表示方法:
(1)一般表示法:[整数].[小数]
(2)指数表示法:[符号位][尾数部分]e[指数部分]
以0.00654为例:
0.00654的指数表示法表示为:0.065410-1或者0.0000654102等等
小数0.00654在计算机中的存储格式为:
因为浮点数数据长度和精度是有限的,所以浮点数存放在舍入误差和计算误差。虽然浮点数精度越高计算结果越准确,但是处理时间比较长。
浮点数的使用细节:
1.浮点数常量在使用时都会默认为double。
2.一般来说,我们都会使用double型数据,因为它比float更精确。
一般而言,实际问题的数学运算,物理运算涉及到的数据选用浮点型。
字符型
C语言的字符型可以表示一个字符(像字母这样的)
首先我们来看看字符型数据的分类
C语言的字符型分为:
有符号型(signed char)和无符号型(unsigned char)
接下来我们来看看字符型的使用
字符型数据可以存储整型数值,有时也称为字节型。字符型数据存储整数时的内存形式与整型一样,只不过其数值范围要小的多。
字符型数据可以存储单字节字符,如ASCII码,此时在内存中的数据是字符的ASCII码值。
最后我们来看看字符型数据与整型数据之间的关系
在C语言中,字符型数据和整型数据之间可以通用。一个字符数据可以赋给整型变量,一个整型数据也可以赋给字符型变量,还可以对字符型数据进行算数运算。
一般地,单字节字符和小范围的整型,如月份,日期,逻辑值和性别等使用字符型。C语言没有多字节字符(如汉字)数据类型,描述这些数据需要使用字符数组来构造。