《C程序设计教程与实验指导》数据类型运算符和表达式.ppt
文本预览下载声明
2.1 标识符和关键字 标识符是程序中用来给变量、函数、数组、类、命名空间起的名称。其命名规则如下: 由大小写英文字母、数字和下划线组成,而且不能以数字开头。 标识符区分大小写。 标识符的有效长度取决于编译系统,如Visual C++规定最长247个字符,Turbo C++规定最长32个字符。一般建议尽量简短。 标识符不能和关键字同名。 关键字 (4)将有符号的整型数据赋给长整型变量,系统要进行符号位扩展。将无符号的整型数据赋给长整型变量时,只需0扩展即可。 (5)将长整型数据赋给整型变量或将整型数据赋给字符型变量,都有可能溢出。例如: char ch=321;溢出后ch的值为A。 §2.6.3 赋值类型转换 (6)同长度有符号整型数据赋给无符号整型变量时,数据将失去符号位功能。例如: unsigned u=-1;则u的值为65535。 (7)同长度无符号整型数据赋给有符号整型变量时,数据将得到符号位功能。例如: int i=65535u;则i的值为-1。 以上(2)、(5)、(6)、(7)将可能改变所赋数据的值。 §2.6.3 赋值类型转换 §2.6.4 强制类型转换 利用强制类型转换运算符将一个表达式的值强制转换成所需类型。即: (类型名)(表达式) 强制类型转换的作用主要有:①使某些数据(例如实型数据)能够进行某种类型(例如求余)运算②设计四舍五入算法,例如将一个实数保留两位小数:设实数f,则(int)(100*f+0.5)/100.0即可实现该算法。③利用动态存储分配建立链表等等。强制类型转换由于是程序员主动进行的类型转换,一般不会发生意想不到的问题。 本节我们介绍了C语言数据类型转换的问题,在自动类型转换、赋值类型转换和强制类型转换中,我们重点要防止赋值类型转换中存在出现的问题,为此,我们在程序设计时要掌握几条原则: (1)要避免数值的变化:避免signed型与unsigned型之间的数据转换;注意计算或输入中数值范围不超过使用类型的数值范围,以防数据溢出,否则定义较高数据类型。 (2)使用数据类型时应尽量避免丢失精度,必要时定义较高的数据类型 §2.6 数据类型转换-小结 §2.7 编译预处理 2.7.1 宏定义 1.不带参数的宏定义 用一个指定的标识符(即名子)来代表一个字符串,它的一般形式为: #define 标识符 字符串 这就是已经介绍过的定义符号常量。如: #define PI 3.1415926 它的作用是指定用标识符PI来代替“3.1415926”这个字符串,在编译预处理时,将程序中在该命令以后出现的所有的PI都用“3.1415926”代替。这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为“宏名”,在预编译时将宏名替换成字符串的过程称为“宏展开”。#define是宏定义命令。 §2.7 编译预处理 2.带参数的宏定义 这种宏定义不是进行简单的字符串替换,还要进行参数替换。其定义的一般形式为: #define宏名(参数表)字符串 字符串中包含在括弧中所指定的参数。如: #define S(a,b) a*b area=S(3,2); 定义矩形面积S,a是b是边长。在程序中用了S(3,2),用3、2分别代替宏定义中的形式参数a、b,即用3*2代替a*b,因此赋值语句展开为: area=S(3,2); §2.7 编译预处理 2.7.2 文件包含 所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来。即将另外的文件包含到本文件之中。C++提供了#include命令用来实现“文件包含”的操作。其一般形式为 #include 文件名 或 #include 文件名 * 2 数据类型、运算符和表达式 本章导读 标识符和关键字 数据类型概述 基本数据类型 常值和变量 运算符、表达式与语句 宏定义 其他运算符与语句 cin和cout asm default float operator static_cast union auto delete for private struct unsigned bool do friend protected switch using break double goto public template virtual case dynamic_cast if register this void catch else inline reinterpret_cast throw volatile char enum int ret
显示全部