数据类型及其表现形式

目录

1.1 变量和常量

1.1.1 常量

1.1.2 变量

1.1.3 变常量

1.1.4 标识符

2.2 数据类型

2.2.1 整型数据的分类

2.2.2 字符型数据

2.2.3 浮点型数据

3.1 怎样确定常量的类型

3.1.1 整型常量

3.1.2 浮点型常量

1.1 变量和常量

在计算计高级语言中,数据有两种表现形式:常量和变量。

1.1.1 常量

在程序运行过程中,其值不能被改变的量称为常量。数值常量就是数学中的常量。常量有整形常量、实型常量、字符常量、字符串常量、符号常量五种类型。

(1)整型常量

整型常量就是通常的整数,包括正整数、负整数和0,其数据类型显然是整型。除此之外,整型常量包括短整型、长整型和无符号型等不同类型。

在C语言中,整型常量有三种书写形式:

十进制整数

十进制整数就是通常整数的写法。例如:11、15、21等。

八进制整数

八进制整数的书写形式是在通常八进制整数的前面加一个数字0。例如:00、0111、015、021等,它们分别表示十进制整数:0、73、13、17

十六进制整数

9十六进制整数的书写形式是在通常十六进制整数的前面加0x。例如:0x0、0x111、0x15、0x21等,它们分别表示十进制整数0、273、21、33。

注意:整型常量前面没有”+”或者”-“,-10其实是一元运算符和操作数10,同样整型常量的十进制表示并没有0,单独写一个0其实是一个八进制常量。

(2)实型常量

实型常量又称实数或浮点数。在C语言中可以用单精度型和双精度型两种形式表示实型常量,分别用类型名float和double进行定义。

又可以分为小数形式指数形式

①小数形式即一般形式的实数。

它是由整数部分、小数点、小数部分组成,其中整数部分或小数部分可以省略其中一个。数的正负用前面的“+”(可以省略)号或“-”号来区分。

②指数形式即指数形式的实数。

它是由尾数部分、小写字母e或大写字母E、指数部分组成,形式如“尾数E指数”或“尾数e指数”。指数形式的实数它的数值可以用公式计算:尾数*10(指数)。由于在计算机输入或输出时无法表示上角或下角,估规定以字母e或E代表以19为底的指数。

注意:e或E之间必须有数字,且e或E后面必须为整数。如不能写成e4,11e2.4。

(3)字符常量

有两种形式的字符常量:普通字符和转义字符。

①普通字符

字符常量是指用一对单引号括起来的一个字符。如‘a’,‘9’,‘!’。字符常量中的单引号只起定界作用并不表示字符本身,字符常量存储计算机存储单元中时,并不是存储字符本身,而是以其代码(一般采用ASCII代码)存储的。

②转义字符

C语言中定义了一些字母前加”\”来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

常用的以“\”开头的特殊字符见下表:

转义符及其作用

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符”\’

092

\’

代表一个单引号(撇号)字符

039

\”

代表一个双引号字符

034

\?

代表一个问号

063

\0

空字符(NUL)

000

\ddd

1到3位八进制数所代表的任意字符

三位八进制

\xhh

十六进制所代表的任意字符

十六进制

注意:

1. 区分:”/” 与 反斜杠:”\” ,此处不可互换

2. \xhh 十六进制转义不限制字符个数 ‘\x000000000000F’ == ‘\xF’

(4)字符串常量

字符串常量是用双引号(“”)括起来的0个或者多个字符组成的序列,且每个字符串尾会自动加一个 ‘\0’ 作为字符串结束标志。

注意:不能错写成’CHINA’,’abc’。单撇号内只能包含一个字符,双撇号内才能包含一个字符串。

(5)符号常量

在C语言中,可以用一个标识符来表示一个常量,这个标识符称之为符号常量。

符号常量在使用之前必须先定义,用#define指令,指定用一个符号名称代表一个常量,形式如下:

#define 标识符 常量

例如:#define  PI   3.1415926                        //注意行末没有分号

经过以上指定后,文本中从此行开始所有的PI都代表3.14115926。在对程序进行编译前,预处理器先对PI进行处理,把所有PI全部置换为3.1415926。在预编译后,符号常量已经全部变成字面常量(3.1415926)。

1.1.2 变量

变量是代表一个有名字的,具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。注意变量必须先定义,后使用。

如下图,区分:”i” 到 “i_pointer” 为变量名,内存用户数据区为变量值,“2000” 到 “3010” 为存储单元的地址。

《数据类型及其表现形式》

从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。

1.1.3 变常量

变常量与常量的异同是:变常量具有常量的基本属性:有类型,占存单元,只是不允许改变其值。可以说,变常量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。

注意:有些编译系统还没有实现C99的功能,因此不能使用常变量。

1.1.4 标识符

在计算机高级语言中,标识符是用户编程时使用的名字,用于给变量、函数、数组、类型等命名的有效字符序列统称为标识符。简单来说,标识符就是一个对象的名字,以建立起名称与使用之间的关系。

C语言规定标识符只能由字母、数字和下画线3种字符组成,且第1个字符必须为字母或者下画线。

注意:编译系统认为大写字母和小写字母是两个不同的字符。

2.2 数据类型

C语言要求在定义所有的变量时都要指定变量的类型。常量也是区分类型的。在计算机中,数据是存放在存储单元中的,是具体存在的。且每个存储单元都是由有限的字节构成的,每个存储单元中存放数据的范围是有限的,不可能存放“无穷大”的数,也不能存放循环小数。

所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。

C语言常用的类型如下表:

数据类型释义内存大小(字节)
char       字符数据类型1
short短整型2
int    整形4
long长整型4/8
long long更长的整形8
float  单精度浮点数4
double双精度浮点数

8

2.2.1 整型数据的分类

整型数据可以分为基本整型、短整型、长整型和双长整型四类。

(1)基本整型(int)

编译系统分配给int型数据2个字节或4个字节(由具体的编译系统自行决定)。在存储单元中的存储方式是:用整数的补码形式存放。在存放整数的存储单元中,最左面一位是用来表示符号的。

如果该位为0,表示该数值为正;如果该位为1,表示该数值为负。

(2)短整型(short)

类型说明符为short int或short。所占字节和存储的方式均与基本型(int)相同。

(3)长整型(long)

类型说明符为short longt或long。

(4)双长整型(long long)

类型名为long long int 或 long long ,一般分配8个字节。这是C99新增的类型,但许多C编译系统尚未实现。

注意:C标准没有具体规定各种类型数据所占用单元的长度,这是有各编译系统自行决定的。C标准只是要求long型数据长度不短于int型,short型不长于int型。即:

sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)

sizeof是测量类型或变量长度的运算符。

2.2.2 字符型数据

字符型(Character)数据是不具计算能力的文字数据类型,它包括中文字符、英文字符、数字字符和其他ASCII字符,其长度(即字符个数)范围是0-255个字符,即0x00至0xFF。

在C语言中,指定用一个字节(8位)存储一个字符,此时,字节中的第一位置为0.

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

2.2.3 浮点型数据

浮点型数据是用来表示具有小数点的实数的。浮点型数据包括float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。

(1)float(单精度浮点型)

编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。

由于用二进制形式表示一个实数以及存储单元的长度是有限的,因此不可能得到完全精确的值,只能存储成有限的精准度。

(2)double(双精度浮点型)

为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字。为了提高运算精度,在C语言中进行浮点数的算术运算时,将float型数据都自动装换为double型,然后进行计算。

3.1 怎样确定常量的类型

在C语言中,不仅变量有类型,常量也有类型。为什么要把常量分为不同的类型呢?在程序中出现的常量是要存放在计算机中的存储单元中的。这就必须确定分配给它多少字节,按什么方式存储。

确定常量的类型,从常量的表示形式即可判定其类型。对于字符常量很简单,只要看到由单撇号括起来的单个字符或转义字符就是字符常量。对于数值常量按以下规律。

3.1.1 整型常量

整型常量就是通常的整数,包括正整数、负整数和0,其数据类型显然是整型。除此之外,整型常量包括短整型、长整型和无符号型等不同类型。不带小数点的数值是整型常量 ,但应注意其有效范围。

3.1.2 浮点型常量

凡以小数形式或指数形式出现的实数,是浮点型常量,在内存中都以指数形式存储。如:10是整型常量,10.0是浮点型常量。对浮点型常量,C编译系统把浮点型常量都按双精度处理,分配8个字节。

注意:C程序中的实型常量都是双精度浮点型常量。

可以在常量的末尾加专用字符,强制指定常量的类型。如在3.14159后面加字母F或f,就表示是float型常量,分配4分字节。

要注意区分类型和变量:

每一个变量都属于一个确定的类型。类型是变量的一个重要属性。变量是占用存储单元的,是具体存在的实体,在其占用存储单元中可以存放数据。而类型是变量的共性,是抽象的,不占用存储单元,不能用来存放数据。

以上内容是以谭浩强老师的第五版《C程序设计》为基础,参照网络资源及个人学习笔记,梳理完成。

    原文作者:黒讬
    原文地址: https://blog.csdn.net/qq_59860806/article/details/120277602
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞