资源预览内容
第1页 / 共72页
第2页 / 共72页
第3页 / 共72页
第4页 / 共72页
第5页 / 共72页
第6页 / 共72页
第7页 / 共72页
第8页 / 共72页
第9页 / 共72页
第10页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第2章 数据类型与表达式2.1 C+的数据类型 2.2 常量 2.3 变量 2.4 C+的运算符 2.5 算术运算符与算术表达式 2.6 赋值运算符与赋值表达式 2.7 逗号运算符与逗号表达式计算机处理的对象是数据,而数据是以某种特定 的形式存在的(例如整数、浮点数、字符等形式) 。不同的数据之间往往还存在某些联系(例如由若 干个整数组成一个整数数组)。数据结构指的是数 据的组织形式。例如,数组就是一种数据结构。不 同的计算机语言所允许使用的数据结构是不同的。 处理同一类问题,如果数据结构不同,算法也会不 同。例如,对10个整数排序和对包含10个元素的整 型数组排序的算法是不同的。 C+可以使用的数据类型如下:2.1 C+的数据类型数据类型基本类型整型短整型(short int) 整型(int) 长整型(long int) 字符型(char) 浮点型 单精度型(float) 双精度型(double) 长双精度型(long double) 布尔型(bool) 构造类型枚举类型(enum) 数组类型 结构体类型(struct) 共用体类型(union) 类类型(class) 指针类型 引用类型 空类型(void) 布尔型就是逻辑型,空类型就是无值型。C+的数据包括常量与变量,常量与变量都具有 类型。由以上这些数据类型还可以构成更复杂的数 据结构。例如利用指针和结构体类型可以构成表、 树、栈等复杂的数据结构。 C+并没有统一规定各类数据的精度、数值范围 和在内存中所占的字节数,各C+编译系统根据自 己的情况作出安排。书中表2.1列出了Visual C+数 值型和字符型数据的情况。说明: (1) 整型数据分为长整型(long int)、一般整型(int) 和短整型(short int)。在int前面加long和short分别 表示长整型和短整型。 (2) 整型数据的存储方式为按二进制数形式存储, 例如十进制整数85的二进制形式为1010101,则在 内存中的存储形式如图2.1所示。图2.1(3) 在整型符号int和字符型符号char的前面,可以 加修饰符signed(表示“有符号”)或unsigned(表示“无 符号”)。如果指定为signed,则数值以补码形式存 放,存储单元中的最高位(bit)用来表示数值的符号 。如果指定为unsigned,则数值没有符号,全部二 进制位都用来表示数值本身。例如短整型数据占两 个字节 ,见图2.2。图2.2有符号时,能存储的最大值为215-1,即32767, 最小值为-32768。无符号时,能存储的最大值为216 -1,即65535,最小值为0。有些数据是没有负值的 ,可以使用unsigned,它存储正数的范围比用 signed时要大一倍。 (4) 浮点型(又称实型)数据分为单精度(float)、双 精度(double)和长双精度(long double)3种,在 Visual C+ 6.0中,对float提供6位有效数字,对 double提供15位有效数字,并且float和double的数 值范围不同。对float分配4个字节,对double和long double分配8个字节。 (5) 表中类型标识符一栏中,方括号 包含的 部分可以省写,如short和short int等效,unsigned int和unsigned等效。常量的值是不能改变的,一般从其字面形式即可 判别是否为常量。常量包括两大类,即数值型常量 (即常数)和字符型常量。如12,0,-3为整型常量, 4.6,-1.23为实型常量,包含在两个单撇号之间的 字符为字符常量,如a,x。这种从字面形式即可 识别的常量称为“字面常量”或“直接常量”。2.2 常量2.2.1 什么是常量数值常量就是通常所说的常数。在C+中,数值 常量是区分类型的,从字面形式即可识别其类型。 1. 整型常量(整数)的类型 在上一节中已知道: 整型数据可分为int,short int,long int以及unsigned int,unsigned short,unsigned long等类别。整型常量也分为以上 类别。为什么将数值常量区分为不同的类别呢?因 为在进行赋值或函数的参数虚实结合时要求数据类 型匹配。 那么,一个整型常量怎样从字面上区分为以上的 类别呢?2.2.2 数值常量(1) 一个整数,如果其值在-32768+32767范围内 ,认为它是short int型,它可以赋值给short int型 、int型和long int型变量。 (2) 一个整数,如果其值超过了上述范围,而在- 2147483648+2147483647范围内,则认为它是long int型,可以将它赋值给一个int或long int型变量。 (3) 如果某一计算机系统的C+版本(例如Visual C+)确定int与long int型数据在内存中占据的长 度相同,则它们能够表示的数值的范围相同。因此 ,一个int型的常量也同时是一个long int型常量, 可以赋给型或long int型变量。 (4) 常量无unsigned型。但一个非负值的整数可以 赋值给unsigned整型变量,只要它的范围不超过变 量的取值范围即可。一个整型常量可以用3种不同的方式表示: (1) 十进制整数。如1357,-432,0等。在一个整型 常量后面加一个字母l或L,则认为是long int型常量 。例如123L,421L,0L等,这往往用于函数调用中 。如果函数的形参为long int,则要求实参也为long int型,此时用123作实参不行,而要用123L作实参 。 (2) 八进制整数。在常数的开头加一个数字0,就 表示这是以八进制数形式表示的常数。如020表示 这是八进制数20,即(20)8,它相当于十进制数 16。 (3) 十六进制整数。在常数的开头加一个数字0和 一个英文字母X(或x),就表示这是以十六进制数形 式表示的常数。如0X20表示这是十六进制数20,即 (20)16,它相当于十进制数32。2. 浮点数的表示方法一个浮点数可以用两种不同的方式表示: (1) 十进制小数形式。如21.456,-7.98等。它一般 由整数部分和小数部分组成,可以省略其中之一( 如78.或.06,.0),但不能二者皆省略。C+编译系 统把用这种形式表示的浮点数一律按双精度常量处 理,在内存中占8个字节。如果在实数的数字之后 加字母F或f,表示此数为单精度浮点数,如1234F,- 43f,占4个字节。如果加字母L或l,表示此数为长 双精度数(long double),在GCC中占12个字节,在 Visual C+ 6.0中占8个字节。(2) 指数形式(即浮点形式) 一个浮点数可以写成指数形式,如3.14159可以表 示为0.314159101,3.14159100,31.415910-1, 314.15910-2等形式。在程序中应表示为: 0.314159e1,3.14159e0,31.4159e-1 ,314.159e-2,用字 母e表示其后的数是以10为底的幂,如e12表示1012 。 其一般形式为 数符 数字部分 指数部分 上面各数据中的0.314159,3.14159, 31.4159, 314.159 等就是其中的数字部分。可以看到: 由于 指数部分的存在,使得同一个浮点数可以用不同的 指数形式来表示,数字部分中小数点的位置是浮动 的。例如: a=0.314159e1; a=3.14159e0; a=31.4159e-1; a=314.159e-2; 以上4个赋值语句中,用了不同形式的浮点数, 但其作用是相同的。 在程序中不论把浮点数写成小数形式还是指数形 式,在内存中都是以指数形式(即浮点形式)存储的 。例如不论在程序中写成314.159或314.159e0, 31.4159e1,3.14159e2, 0.314159e3等形式,在内存 中都是以规范化的指数形式存放,如图2.3所示。图2.3数字部分必须小于1,同时,小数点后面第一个 数字必须是一个非0数字,例如不能是0.0314159。 因此314.159和314.159e0,31.4159e1,3.14159e2, 0.314159e3在内存中表示成0.314159103。存储单 元分为两部分,一部分用来存放数字部分,一部分 用来存放指数部分。为便于理解,在图2.3中是用 十进制表示的,实际上在存储单元中是用二进制数 来表示小数部分,用2的幂次来表示指数部分的。对于以指数形式表示的数值常量,也都作为双精 度常量处理。 1. 普通的字符常量用单撇号括起来的一个字符就是字符型常量。如 a,#,%,D都是合法的字符常量,在内存中占一 个字节。注意: 字符常量只能包括一个字符, 如AB 是不合法的。字符常量区分大小写字母, 如A和a是两个不同的字符常量。撇号()是定 界符,而不属于字符常量的一部分。如cout using namespace std; int main( )int i,j; /i和j是整型变量 i=A; /将一个字符常量赋给整型变量i j=B; /将一个字符常量赋给整型变量j cout using namespace std; int main( ) char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;cout 或 #include 变量的值应该是可以变化的,怎么值是固定的量 也称变量呢?其实,从计算机实现的角度看,变量 的特征是存在一个以变量名命名的存储单元,在一 般情况下,存储单元中的内容是可以变化的。对常 变量来说,无非在此变量的基础上加上一个限定: 存储单元中的值不允许变化。因此常变量又称为只 读变量(read-only-variable)。请区别用#define命令定义的符号常量和用const定 义的常变量。符号常量只是用一个符号代替一个字 符串,在预编译时把所有符号常量替换为所指定的 字符串,它没有类型,在内存中并不存在以符号常 量命名的存储单元。而常变量具有变量的特征,它 具有类型,在内存中存在着以它命名的存储单元, 可以用sizeof运算符测出其长度。与一般变量惟一 的不同是指定变量的值不能改变。用#define命令定 义符号常量是C语言所采用的方法,C+把它保留 下来是为了和C兼容。C+的程序员一般喜欢用 const定义常变量。虽然二者实现的方法不同,但从 使用的角度看,都可以认为用了一个标识符代表了 一个常量。有些书上把用const定义的常变量也称为 定义常量,但读者应该了解它和符号常量的区别。C+的运算符十分丰富,使得C+的运算十分灵 活方便。例如把赋值号(=)也作为运算符处理,这样 ,a=b=c=4就是合法的表达式,这是与其他语言不 同的。C+提供了以下运算符: (1) 算术运算符+(加)-(减) *(乘) /(除) %(整除求余)+(自加) -( 自减) (2) 关系运算符 (大于)(小于) (等于)(大于或等于) (小于或等于)!(不等于)2.4 C+的运算符() 逻辑运算符 (逻辑与) |(逻辑或) !(逻辑非) () 位运算符 (按位右移) (按位与) |(按位或 ) (按位异或) (按位取反) () 赋值运算符 (及其扩展赋值运算符) () 条件运算符 (?:) () 逗号运算符 (,) () 指针运算符 (*) (9) 引用运算符和地址运算符 () (10) 求字节数运算符() (11) 强制类型转换运算符( (类型) 或类型( ))(12) 成员运算符 (.) (1
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号