C/C++中数据类型的解析

前言

在数学中,数据是不分类型的,数值的运算是绝对准确的,例如22+33=55,1/3的结果是循环小数0.3333……。数学是一门研究抽象的学科,书合数的运算也是抽象的。

在计算机中,数据是存放在存储单元中的,它是具体存在的。并且,存储单元是由有限的字节构成的,每一个存储单元中存放数据的范围是有限的,不可能存放“无穷大”的书,也不能存放循环小数。

所谓数据类型,其实是数据再计算机中分配存储单元的安排,包括存储单元的长度以及数据的存储形式。不同的数据类型对应着分配不同的长度和存储形式。

1.常见数据类型


基本类型和枚举类型变量的值都是数值,统称为算数类型。算数类型和指针类型变量的值都是用数字表示的,统称为纯量类型。

2.整型数据

整型数据可以分为两个主要部分:最基本的整型数据和字符型数据。最基本的整型类型包括:int、short int、long int、long long int。字符型数据则包括:signed char、unsigned char。

2.1 最基本的整型数据

下图是整型数据常见的存储空间和值的范围


C标准没有具体规定各种类型数据所占用存储单元的长度,这是由各编译系统自行决定的,所以上图中int会出现不同存储长度。C标准值要求long型数据长度不短于int型,short型不长于int型。即 sizeof( short ) <= sizeof( int ) <= sizeof( long ) <= sizeof( long long ),其中sizeof是测量类型或者变量长度的运算符。

2.2 字符型数据

2.2.1字符与字符代码

字符是按照其代码(整数)的形式存储的,因此可以把字符型数据作为整形数据的一种。字符与字符代码通常使用ASCII字符集来实现对应。

扫描二维码关注公众号,回复: 2943228 查看本文章


字符按照整数的形式存放在内存中,例如大写字母'A'的ASCII代码十进制数是65,二进制形式是1000001,那么使用7个二进制位就可以完成字符‘A’的存储。

需要特别注意的是字符‘1’和整数1是不同的概念,字符‘1’只代表一个形状是‘1’的符号,在需要时候按照原样输出,在内存中以ASCII码形式存储,占一个字节。而整数1是一整数存储方式(二进制补码方式)存储的,占2个或4个字节。

2.2.2字符变量

字符变量是用类型符char定义的字符变量。例如char c = ‘?’;定义c为字符型变量并使得初值为字符‘?’。‘?’的ASCII代码是63,系统把整数63赋给了变量c。

c是字符变量,实质上是一个字节的整形数据,由于它常用来存放字符,所以称之为字符变量。可以把0~127之间的整数赋给一个字符变量。在输出之前可以选择以十进制形式(%d)或者字符串形式(%c)输出。例如printf("%d %c\n",c,c);输出的结果是 63 ?。

字符型数据的存储空间和值的范围如下如所示。


*char类型如果不做说明是有符号还是无符号时,默认是无符号的。

如果将一个负整数赋给有符号字符型变量是合法的,但它不代表一个字符,因为根据ASCII表字符都在0~127内。此时它作为一字节整型变量存储负整数。如:signed char c = -6; 

3.浮点型数据

浮点型数据是用来表示具有小数点的实数的。同一个实数表示为指数形式时,由于指数取值不同,小数点的位置是可以浮动,所以称之为浮点数。浮点数的类型包括:float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。

以下是不同类型实型数据各自的情况。


由于有限的存储单元存储一个实数,不可能完全精确的存储,例如float型变量能存储的最小正数是1.2*10^-38,决不能存储绝对值小于此数的值,例如10^-40。

猜你喜欢

转载自blog.csdn.net/loongkingwhat/article/details/77659022