C语言中数据的表现形式及其运算
1. 常量和变量
1.1 常量
在程序运行过程中,其值不能被改变的量称为常量。如1000,0.0036,0.0025是常量。数值常量就是数学中的常量。
(1)整型常量。如1000,12345,0,-324等都是整形常量
(2)实型常量。有两种表现形式:
①十进制小数形式,由数字和小数点组成。如123.456,0.12,-56.79等
②指数形式。如12.34e3,-123.87e等,
(3)字符常量。有两种形式的字符常量
①普通字符,用单撇号括起来的一个字符,如:‘a’, ‘Z’ , ‘3’ , ‘?’。不能写成 ‘ab’ 或 ‘12’ 。
请注意:单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。‘a’ 和 ‘A’ 是不同的字符常量。
字符常量存储在计算机存储单元中,并不是存储字符本身,而是其代码(一般采用ASCII代码)存储的。
例如字符 ‘a’ 的ASCII代码是 97,因此,在存储单元中存放的是97(以二进制形式存放)。
②转义字符,除了以上形式的字符常量外,C语言还允许用一种特殊形式的字符常量,就是以字符""开头的字符序列。例如printf函数中的 ‘\n’ 代表一个 "换行"符。 ‘\t’ 代表将输出的位置跳到下一个Tab位置。这是一种在屏幕上无法显示的 “控制字符”,在程序中也无法一个一般形式的字符来表示,只能采用这种特殊形式来表示。
(4)字符串常量
如"boy","123"等,用双撇号把若干个字符括起来,字符串常量是双撇号中的全部字符。
(5)符号常量
用#define 指令,指定用一个符号名称代表一个常量,例如:
#define PI 3.1415
这种用一个符号名代表一个常量的,称为符号常量,有以下好处:
①含义清楚。看程序从PI就可以大致知道它代表圆周率,考虑了“见名知意”。
②在需要改变程序中多处用到的同一个常量时,能做到”一改全改“。
1.2 变量
变量代表一个有名字的、具有特点属性的一个存储单元。它用来存放数据,也是存放变量的值。在程序运行期间,变量的值可以改变的。
变量需要先定义,后使用。定义变量时指定该变量的名字和类型。变量名和变量值是两个不同的概念。
变量名实际上是一个名字代表的一个存储地址。
1.3 常变量
C99允许使用常变量,方法是在定义变量时,前面加一个关键字const,例如:
const int a = 3;
定义a为一个整型变量,指定其值为3,而且在变量存储期间其值不能改变。
常变量和变量的异同是:
常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。
1.4 标识符
在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为 标识符。
C语言规定标识符只能由字母、数字、下划线三种字符组成,且第一个标识符必须为字母或下划线。
注意:编译系统认为大写字母和小写字母是两个不同的字符,因此,sum和SUM是两个不同的变量名,同样class和Class也是两个不同的变量名。
2.数据类型
所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。
其中,基本类型(包括整型和浮点型)和枚举类型变量的值都是数值,统称为算术类型。
算术类型和指针类型统称为纯量类型,因为其变量的值是以数字来表示的。
枚举类型是程序中用户定义的整型类型。数组类型统称为组合类型,共用体类型不属于组合类型,因为同一个时间内只有一个成员有值。不同类型的数据在内存中占用的存储单元长度是不同的,比如在VC++编译器中char型数据分配一个字节,int型分配4个字节。
2.1整型数据
2.1.1整型数据的分类
(1)基本整型(int型)
编译系统分配给int型数据2个字节或4个字节(由具体的C编译系统自行决定)。
在存放整数的存储单元中,最左边一位是用来表示符号的。如果该数为0,表示数值为正;如果该数为1,表示数值为负。
(2)短整型(short int)
VC++ 编译器中分配给int 4个字节,则short int 短整型2个字节。
(3)长整型(long int)
类型名为long int 或long 。VC++编译器对一个long型数据分配4个字节(即32位)。
因此lont int 型变量的范围为 -2的31次方~(2的31次方-1)。
(4)双长整型(long long int)
类型名为 long long int或 long long。一般分配八个字节。
C标准没有具体规定各种类型数据所占用存储单元的长度,这是由各编译器系统自行决定的。C标准只要求Long型数据长度不短于int 型,short型不长于 int型。即:
sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
2.1.2整型变量的符号属性
整型数据常见的存储空间和值的范围见下图
类型 | 字节数 | |
---|---|---|
int(基本类型) | 4 | |
unsigned int(无符号基本整型) | 4 | |
short(短整型) | 2 | |
unsigned short(无符号短整型) | 2 | |
long(长整型) | 4 | |
unsigned long(无符号长整型) | 4 | |
long long(双长型) | 8 | |
unsigned long long(无符号双长整型) | 8 |
说明:
1.只有整型(包括字符型)数据可以加signed 或unsigned 修饰符,实型数据不能加。
2.对无符号整型数据用 “%u” 格式输出。 %u 表示用无符号十进制数的格式输出。
2.2字符型数据
2.2.1字符与字符代码
字符与字符代码并不是任意写一个字符,程序都能识别的。只能使用系统的字符集中的字符,目前大多数系统采用ASCII字符集。其中包括:
字母:大写英文字符 A~Z, 小写英文字母 a~z。
数字:0~9
专门符号:29个,包括 ! : # &’ + , - . / : ; < = > ? [] ^ _ ; ` { | } ~
空格符:空格、水平制表符(tab)、垂直制表符、换行、换页(form feed)。
不能显示的字符:空(null)字符(以 ‘\0’ 表示)、警告(以 ‘\a’ 表示)…
注意
字符 ‘1’ 和整数1是不同的概念。字符 ‘1’ 只是代表一个形状为 ‘1’ 的符号,在需要时按原样输出,在内存中以 ASCII码形式存储,占一个字节;而整数1是以整数存储方式存储的,占2个或者4个字节。
整数运行1+1=2,而字符 ’1‘ + ’1‘ 并不等于2或 字符 ’2‘。
2.2.2字符变量
字符变量是用类型符 char 定义字符变量。char 是英文character(字符)的缩写,如:
char c= '?';
定义c为字符型变量并使初值为字符 '?'。 '?' 的ASCII 代码是63,系统把整数63赋给变量c。
说明: 用"%d"格式输出十进制整数63,用"%c"格式输出 字符 ’ ? ’。
前面介绍了整型变量可以用signed 和 unsigned修饰符表示符号属性,字符类型也属于整形,也可以用signed 和 unsigned 修饰符。
说明:在使用有符合字符型变量时,允许存储的值为 -128~127,但字符的代码不可能为负值,所以在存储字符时实际上只用到0-127这一部分。
2.2.3 浮点型数据
浮点型数据包括 float (单精度浮点型)、double(双精度浮点型)、longlong(长双精度浮点型)。
(1)float型(单精度浮点型)。编译系统位每一位float型变量分配四个字节,在存储时,系统将实型数据分成小数部分和指数部分两个部分。
(2)double型(双精度浮点型)。为了扩大能表示的数值范围,在C语言进行浮点数的算术运算时,将float型数据字段转换为double 型,然后进行运算。
(3)long double型(长双精度)型。
注意 类型 和 变量 的关系。
每一个变量都属于一个确定的类型,类型是变量的一个重要的属性。变量是占用存储单元的,是具体存在的实体,在其占用的存储单元中可以存放数据。
而类型是变量的共性,是抽象的,不占存储单元,不能用来存放数据。
本文来源 《C程序设计》谭浩强