1、第2章 数据类型、运算符和表达式,基本数据类型 常量和变量 输入输出,运算符和表达式 数据类型的转换 构造数据类型,基本数据类型,整型 字符型 浮点型,布尔型 空型,C+提供的基本数据类型,修饰符,C+还允许在不同的数据类型前面增加修饰符来更改基本类型的含义。 signed,unsigned,long和short。 其中int前面可以单独使用siged,unsigned,long和short,并且signed和unsigned还可以与long和short组合在一起放在int前面 char前面可以单独使用signed和unsigned; double前面可以单独使用long。,C+的数据类型,整
2、型,C+中定义了9种类型的整型,其中包括普通的整型(int)、长整型(long int)和短整型(short int)。这3种数据类型的前面还可以加上signed和unsigned修饰符来表示有符号整型和无符号整型。,符号整数和无符号整数,#include using namespace std; void main() short int i;unsigned short int j;i=-1;j=i;cout“i=“i“;j=“j; ,字符型,在计算机中保存字符采用的是8位的ASCII码。 要把字符用单引号扩起来 x、0 如果所需的整数表示范围很小(在128到127之间,或者在0到255之
3、间),可考虑使用字符型数据,字符型数据和整型数据的互换使用,#include using namespace std; void main() char c;short int i;c=A;i=c;cout“c=“c“;i=“i; ,浮点型,浮点型数据有3种:float,double和long double。 选用的数据类型应该能够表示所需要的数字,不能超出数据类型的表示范围,还要考虑不同的数据类型可以表示数据的精度是否符合程序要求。一种数据类型占用的内存空间越大,能够表示的数据范围就越大,但是使用这样的数字进行计算的速度也越慢,因此在选择数据类型的时候也不要没有任何依据地使用long dou
4、ble类型表示数据以求保险(一般的数字用double类型就足够了)或者贪图不必要的精度而损失了程序的运行速度。,浮点数的舍入误差,#include using namespace std; void main() float a,b;a=555555.555e5;b=a+40;cout“a=“a“;b=“b; ,布尔型,true和false 如果在布尔表达式中使用了数字,那么C+会把0作为false,非0的数字作为true。 如果在一个非布尔表达式中使用bool类型的数据,那么会把true转换为1,把false转换为0。,bool和int类型数据的转换,#include using names
5、pace std; void main() bool b1,b2;int i,j;b1=true;i=20;j=b1;b2=i;cout“j=“j“;b2=“b2; ,空型,空型是一种十分特别的数据类型,它表示没有任何值,因此并没有一个实际存在的数字可以定义成void类型。 空型通常用在定义函数的时候表示一个函数没有返回值。,常量和变量,常量 变量,常量,常量是一个具有实际值的量,并且其值在程序中不可以改变。,整型常量,整型常量用于表示整数。 可以使用十进制、十六进制、八进制的整数。 十进制的数字:10、25。 十六进制整数需要在整数的前面加上一个0x:0x123 八进制数需要在整数的前面加上
6、一个O:O123 如果在程序中遇到了一个整数常量,通常认为这个整数的数据类型是int。 如果要表示的数字超出了int类型数据的表示范围,但是在unsigned int数据类型的表示范围之内,就在这个数据类型中在数据的后面增加一个u后缀:3213213213u。 如果希望定义long int 类型的常量,在这个数据后加l后缀。,浮点型常量,如果在程序中遇到的一个数字带有小数部分,那么C+编译器就认为这个数字是一个浮点型常量 12.3,1.0,0.123E2 浮点型数据具有舍入误差,字符型常量,如果要定义字符型常量,只要用单引号将这个字符括起来就可以了。 x、2、#,字符串常量,把字符串用双引号括
7、起来 “Hello world!“ 一个字符串中的各个字符会占用内存中连续的字节,使用0字符表示字符串的结束。 a与“a“完全不同,符号常量,对于一些经常使用并且有特定意义的常量允许采用符号的方式代替,在程序中所有使用这个常量的地方都可以使用这个符号常量进行替代 使用C+提供的预编译指令#define #define PI 3.14,变量,变量就是可以在程序中保存数据的量。由于这个量的值是可以改变的,因此被称为变量,变量的命名,组成变量名的字符必须是大写字母、小写字母、数字或者下划线,并且只能以字母或者下划线开头。 变量名不能使用C+语言保留的关键字,变量的声明,数据类型 变量名列表; int
8、 Count; double Price,Total; 所有的变量在声明时都要求指明它的数据类型。,变量的初始化,变量的初始化是指在变量被正式使用之前给变量一个初值。 (1) 在定义变量时给变量赋一个初值。 (2) 在使用变量之前给变量赋一个初值。 (3) 动态初始化。 int Count=2; double Price,Total; Price=28.7; Total=Price * Count;,常数型变量,使用const关键字创建常数型变量,这样就可以把一个变量作为常数来使用 const 数据类型 变量名=表达式; const float PI=3.14;,输 入 输 出,cout ci
9、n,流,C+中定义的输入输出都是采用流的方式进行的。 在输入操作中,输入数据以字节的形式从输入设备(例如键盘、磁盘、网络等)经过输入流流入计算机的内存; 在输出操作中,输出数据又以字节的形式从内存经过输出流流出到输出设备(例如显示器、打印机、磁盘、网络等)。 在C+中,可以使用它提供的标准输入对象cin和标准输出对象cout实现输入输出操作。 cin表示的是C+的输入流 cout表示的是C+的输出流 cerr流用于实现标准的出错输出 clog流实现cerr流的缓冲输出。,cout,使用操作符来实现输出, 的作用是实现向流中插入。 int i=10; cout“i=“i;,在输出中使用转义字符,
10、#include using namespace std; void main() cout“abcdetfgbhijrkn“;cout“I say:“hello! “n“;cout“n的意思是回车换行n“; ,用t和setw()实现输出,#include #include using namespace std; void main() cout“abctdef“endl;cout“ghitjkl“endl;coutsetw(6)“abc“setw(6)“def“endl;coutsetw(6)“ghi“setw(6)“jkl“endl; ,cin,输入是从输入流中提取数据的过程。默认的输入
11、设备是键盘。 使用操作符。 int a; double b; cinab;,输入一个矩形的长和宽,输出矩形的面积,#include using namespace std; void main() double Length;double Width;coutLength;coutWidth;cout“Area=“Length*Widthendl; ,运算符和表达式,算术运算符和算术表达式 关系运算符与关系表达式 逻辑运算符和逻辑表达式 位运算符和位运算表达式 赋值运算符和赋值表达式,逗号运算符 sizeof运算符,算术运算符,使用自增和自减运算符,算术表达式,算术表达式是由算术运算符将运算对
12、象连接起来的式子 算术运算符的优先级,关系运算符与关系表达式,关系运算符是双目运算符,可以作用在除viod类型之外的任意类型的两个操作数上。 由关系运算符将运算对象连接起来的式子就是关系表达式。 关系表达式的计算结果要么是true,要么是false。,使用关系运算符,关系运算符的优先级,逻辑运算符和逻辑表达式,逻辑运算符作用在除void类型之外的所有数据上,得到的结果是bool类型的true或者false。 用逻辑运算符连接运算对象就可以得到逻辑表达式。,实现异或运算,逻辑运算符和关系运算符的优先级,位运算符和位运算表达式,位运算就是指能够直接对字节或者字的位进行运算的运算符。按位运算只能对整
13、数类型和字符类型的数据进行操作,不能用在其他类型的数据上。 由位运算符将运算对象连接起来的式子就是位运算表达式。,按位与、或、异或和取反运算符,按位与运算的特点是只有参与运算的两个位都是1结果位才是1,否则结果位是0; 按位或运算的特点是只有参与运算的两个位都是0结果位才是0,否则结果位是1; 按位异或运算的特点是只有参与运算的两个位不同结果位才是1,否则结果位是0; 按位取反运算符只有一个操作数,对1取反结果是0,对0取反结果是1。,使用按位与、或和取反运算符,使用异或运算实现加密和解密,移位运算符,右移位运算符的作用是将一个数的所有位向右移动指定的位数 左移位运算符的作用是将一个数的所有位
14、向左移动指定的位数 运算符的左边是需要移位的数据,而运算符的右边放置的是一个正整数,表示要移位的位数。,使用移位运算,赋值运算符和赋值表达式,赋值运算符就是一个等号(=),表示把“=”右面的表达式的值赋值给左边的变量 变量=表达式 一个用赋值运算符连接运算对象的式子就是赋值表达式。,复合赋值运算符,只要在赋值运算符前面加上一个其他的二目运算符,就形成了复合赋值运算符。 +=、=、*=、/=、%=、=、&=、=、|=,逗号运算符,使用逗号运算符可以将几个表达式连接起来,这样构成的表达式就是逗号表达式,整个表达式的值就是最右边一个表达式的值。 a=(b=12,c=34,d=56); 首先计算b=1
15、2,然后计算c=34,再计算d=56。逗号表达式b=12,c=34,d=56的结果就是最右边的表达式的值56,因此a的值是56。,sizeof运算符,sizeof运算符可以计算出数据类型所占用空间 sizeof运算符有两种使用方式: sizeof(数据类型) sizeof 变量名,使用sizeof运算符,数据类型的转换,赋值运算中的数据类型转换 表达式中的数据类型转换,赋值运算中的数据类型转换,如果把一种类型的数据赋值给另一种类型的变量,那么在赋值的过程中就会发生数据类型的转换。 由于各种数据类型所占用的内存空间不同,因此当占用内存空间大的数据类型向占用内存空间小的数据类型转换的时候,会导致高
16、位数据丢失的情况。,数据类型转换导致的错误,表达式中的数据类型转换,在表达式中,如果各个运算对象的数据类型不同,那么C+会自动把它们转换成同样的数据类型再进行计算。 在进行类型转换的时候,都是从占用内存空间少的数据类型向占用内存空间多的数据类型进行转换。 C+还允许使用强制类型转换来实现显式的类型转换 (数据类型)表达式,构造数据类型,结构体 共用体 枚举 自定义数据类型,结构体,将所有相关的数据项组合在一起,形成一种新的数据结构,称为结构体 struct 结构体名 数据类型 成员名;. ; 使用“.”运算符访问一个结构体变量的各个成员,这个运算符称为成员运算符。 结构体变量名.成员名,计算一个三角形的面积,共用体,将几个不同数据类型的变量保存到同一个内存空间中,实际上是这些不同数据类型的变量占用从同一个地址开始的内存空间,各个变量相互覆盖。 这种使几个变量占用同样内存空间的结构称为共用体。 union 共用体名 数据类型 成员名; . ;,使用共用体,枚举,所谓枚举类型,就是指在定义类型的时候一一列出这个类型的数据可能的取值。 enum WeekDaysun,mon,tue,wed,thu,fri,sat;,使用枚举类型,自定义数据类型,使用typedef关键字将一个标识符定义为一个数据类型标识符。 typedef 数据类型 标识符;,