2 数据类型与表达式.ppt

上传人:s****8 文档编号:69119695 上传时间:2022-12-30 格式:PPT 页数:58 大小:324KB
返回 下载 相关 举报
2 数据类型与表达式.ppt_第1页
第1页 / 共58页
2 数据类型与表达式.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《2 数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《2 数据类型与表达式.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第章数据类型与表达式第章数据类型与表达式2.1 C+的数据类型的数据类型2.2 常量常量2.3 变量变量2.4 C+的运算符的运算符2.5 算术运算符与算术表达式算术运算符与算术表达式2.6 赋值运算符与赋值表达式赋值运算符与赋值表达式计算机处理的对象是数据,而数据是以内存计算机处理的对象是数据,而数据是以内存中的中的bit的形式存在的,按占的形式存在的,按占bit的不同,分为的不同,分为整数、浮点数、字符等整数、浮点数、字符等类型类型。“int a,b,sum;”是声明语句,定义变量是声明语句,定义变量a,b和和sum为整数类型变量。为整数类型变量。语言的数据类型包含语言的数据类型包含基本数

2、据类型基本数据类型和和构造数据类型构造数据类型。最基本:最基本:int(整数整数)char(字符字符)float(实数实数)2.1 2.1 的数据类型的数据类型数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型引用类型引用类型空类型空类型(void)单精度型单精度型(float)双精度型双精度型(double)长双精度型长双精度型(long double)短整型短整型(short int)整型整型(int)长整型长整型(long int)整型整型字符型字符型(char)浮点型浮点型布尔型布尔型(bool)枚举类型枚举类型(enum)数组类型数组类型结构体类型结构体类型(struc

3、t)共用体类型共用体类型(union)类类型类类型(class)布布尔尔型型就就是是逻逻辑辑型型,空空类类型型就就是是无无值值型型类型类型标识类型类型标识 字节数值范围字节数值范围整型整型 signed int 4 -2147483648 +2147483647无符号整型无符号整型 unsigned int 4 0 4294967295短整型短整型 short int 2 -32768 +32767无符号短整型无符号短整型 unsigned short int 2 0 65535长整型长整型 long int 4 -2147483648 +2147483647无符号长整型无符号长整型 unsi

4、gned long int 4 0 4294967295字符型字符型 signde char 1 -128 +127无符号字符型无符号字符型 unsigned char 1 0 255单精度型单精度型 float 4 3.410-38 3.41038双精度型双精度型 double 8 1.710-308 1.710308长双精度型长双精度型 long double 8 1.710-308 1.710308表表2.1 数值型和字符型数据的字节数和数值范围数值型和字符型数据的字节数和数值范围说明:说明:(1)整型数据分为长整型整型数据分为长整型(long int)、一般整型一般整型(int)和短整

5、和短整型型(short int)。在。在int前面加前面加long和和short分别表示长整型和分别表示长整型和短整型。短整型。(2)数据的存储方式为按二进制数形式存储,例如十进制数据的存储方式为按二进制数形式存储,例如十进制整数整数85的二进制形式为的二进制形式为1010101,则在内存中的存储形,则在内存中的存储形式如图式如图2.1所示。所示。(短整型短整型)图图2.1(3)在整型符号在整型符号int和字符型符号和字符型符号char的前面的前面,可以可以加修饰符加修饰符signed(表示表示“有符号有符号”)或或unsigned(表表示示“无符号无符号”)。如果指定为如果指定为signed

6、,则存储单元中的最高位则存储单元中的最高位(bit)用来表示数值的符号。用来表示数值的符号。如果指定为如果指定为unsigned,则数值没有符号,全部则数值没有符号,全部二进制位都用来表示数值本身。二进制位都用来表示数值本身。例如短整型数据占两个字节例如短整型数据占两个字节,见图,见图2.2。图图2.2类型类型标识类型类型标识 字节数值范围字节数值范围短整型短整型 short int 2 -32768 +32767无符号短整型无符号短整型 unsigned short int 2 0 65535(4)浮点型浮点型(又称实型又称实型)数据分为单精度数据分为单精度(float)、双精度双精度(do

7、uble)和长双精度和长双精度(long double)3种,在种,在Visual C+6.0中,中,对对float分配分配4个字节,对个字节,对double和和long double分配分配8个字节。个字节。(5)表中类型标识符一栏中,方括号表中类型标识符一栏中,方括号 包含的部分可以省写,包含的部分可以省写,如如short和和short int等效,等效,unsigned int和和unsigned等效。等效。2.2 2.2 常量常量2.2.1 2.2.1 什么是常量什么是常量常量是常量是在程序中不能被改变的量在程序中不能被改变的量。常量包括两大。常量包括两大类,即数值型常量类,即数值型常

8、量(即常数即常数)和字符型常量。和字符型常量。数值常量就是通常所说的常数。数值常量就是通常所说的常数。1.整型常量(整数)的类型整型常量(整数)的类型整型常量与整型数据一样,可以分为整型常量与整型数据一样,可以分为int,short int,long int以及以及unsigned int,unsigned short,unsigned long等类别。等类别。2.2.2 2.2.2 数值常量数值常量2.2.浮点数(实数)的表示方法浮点数(实数)的表示方法在程序中,一个浮点数可以用两种不同的方式表示:在程序中,一个浮点数可以用两种不同的方式表示:(1)十进制小数形式。如十进制小数形式。如21.

9、456,-7.98等。等。(2)指数形式指数形式(即浮点形式即浮点形式)一个浮点数可以写成指数形式,一个浮点数可以写成指数形式,如如3.14159,在程序中应表示为:在程序中应表示为:0.314159e1(0.314159101),3.14159e0(3.14159100),31.4159e-1(31.415910-1),用字母用字母e表示其后的数是以表示其后的数是以10为底的幂为底的幂。1.1.普通的字符常量普通的字符常量用用单撇号单撇号括起来的括起来的一个一个字符就是字符型常量字符就是字符型常量。如。如a,#,%,D都是合法的字符常量。注意:都是合法的字符常量。注意:字符常量字符常量只能包

10、括一个字符只能包括一个字符,如,如AB 是不合法的。是不合法的。字符常量区分大小写字母,如字符常量区分大小写字母,如A和和a是两个不同是两个不同的字符常量。的字符常量。撇号撇号()是定界符,而不属于字符常量的一部分。如是定界符,而不属于字符常量的一部分。如couta;输出的是一个字母输出的是一个字母“a”。2.2.3 2.2.3 字符常量字符常量2.2.转义字符常量转义字符常量C+还允许用一种还允许用一种特殊形式的字符常量特殊形式的字符常量,就是,就是以以“”开头开头的字符序列。例如,的字符序列。例如,n代表一个代表一个“换行换行”符。符。“coutn;”将输出一个换行,其作用与将输出一个换行

11、,其作用与“coutendl;”相同。相同。表表2.2中列出的以中列出的以“”开头的字符称为开头的字符称为“转义字符转义字符”,意思,意思是将反斜杠(是将反斜杠()后面的字符转换成另外的意义。如)后面的字符转换成另外的意义。如n中中的的“”不代表字母而作为不代表字母而作为“换行换行”符。符。编译系统在见到编译系统在见到“”时,会接着找它后面的字符把它处理成时,会接着找它后面的字符把它处理成一个字符。一个字符。表表2.2 转义字符及其含义转义字符及其含义字符形式含义字符形式含义 ASCII代码代码a 响铃响铃 7n 换行,将当前位置换到下一行开头换行,将当前位置换到下一行开头 10t 水平制表(

12、跳到下一个水平制表(跳到下一个tab位置)位置)9b 退格,将当前位置移到前一列退格,将当前位置移到前一列 8r 回车,将当前位置移到本行开头回车,将当前位置移到本行开头 13f 换页,将当前位置移到下页开头换页,将当前位置移到下页开头 12v 竖向跳格竖向跳格 11 反斜杠字符反斜杠字符“”92 单引号字符单引号字符 39“双引号字符双引号字符 340 空字符空字符 03.3.字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法将一个字符常量存放到内存单元时,实际上是将一个字符常量存放到内存单元时,实际上是将该字符相将该字符相应的应的ASCII代码(见附录)代码(见附

13、录)放到存储单元中放到存储单元中。如果字符变。如果字符变量量c1的值为的值为a,c2的值为的值为b,则在变量中存放的是则在变量中存放的是a的的ASCII码码97,b 的的ASCII码码98,如图,如图2.4(a)所所示,实际上在内存中是以二进制形式存放的,如图示,实际上在内存中是以二进制形式存放的,如图2.4(b)所示。所示。图图2.4特别地,特别地,在在C+中中字符型数据和整型数据之间可以通用字符型数据和整型数据之间可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以可以赋给一个字符变量。也可以对字

14、符数据进行算术运算,对字符数据进行算术运算,此此时相当于对它们的时相当于对它们的ASCII码进行算术运算。码进行算术运算。例例2.1 将字符赋给整型变量。将字符赋给整型变量。#include using namespace std;int main()int i,j;/i和和j是整型变量是整型变量i=A;/将一个字符常量赋给整型变量将一个字符常量赋给整型变量ij=B;/将一个字符常量赋给整型变量将一个字符常量赋给整型变量jcouti jn;/输出整型变量输出整型变量i和和j的值的值return 0;执行时输出执行时输出65 66i和和j被声明为整型变量。被声明为整型变量。语句语句;与语句与语句

15、65;66;等价。等价。因为因为和和的的ASCII码分别为码分别为65和和66.可见:可见:在一定条件下,字符型数据和整型数据是可以通在一定条件下,字符型数据和整型数据是可以通用的。用的。例例2.2 字符数据与整数进行算术运算。字符数据与整数进行算术运算。#include using namespace std;int main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;coutc1 c2endl;return 0;程序的作用是将小写字母转换为大写字母。程序的作用是将小写字母转换为大写字母。运行结果为运行结果为A Ba的的ASCII码为码为97,而,而A的

16、的ASCII码为码为65,每一个小写每一个小写字母比它相应的大写字母的字母比它相应的大写字母的ASCII代码大代码大32。a-32得到整数得到整数65,将,将65存放在存放在c1中,用中,用cout输出输出c1(=65)时,由于时,由于c1是字符变量,因此输出字符是字符变量,因此输出字符A。4.4.字符串常量字符串常量用用双撇号双撇号括起来的部分就是括起来的部分就是字符串字符串常量,如常量,如abc,Hello!,a+b,Liping都是字符串常量。都是字符串常量。字符串常量字符串常量abc在内存中占在内存中占4个字节个字节(而不是而不是3个字节个字节),见图见图2.5。图图2.5编译系统会在

17、字符串最后自动加一个编译系统会在字符串最后自动加一个0作为字符串结束作为字符串结束标志标志。注意:注意:a和和a代表不同的含义,代表不同的含义,a是字符串常量,是字符串常量,a 是字符常量。前者占两个字节,后者占是字符常量。前者占两个字节,后者占1个字节。个字节。请分析下面的程序片段:请分析下面的程序片段:char c;c=a;?c=a;?/定义一个字符变量定义一个字符变量/正确正确/错误,错误,c只能容纳一个字符只能容纳一个字符?字符串常量字符串常量abcn包含几个字符包含几个字符4个字符,其中个字符,其中“n”是一个转义字符。但它在内存中占是一个转义字符。但它在内存中占5个字节个字节(包括

18、一个包括一个“0”字符字符)。如果希望将如果希望将“”字符也作为字符串中的一个字符,则应写字符也作为字符串中的一个字符,则应写为为”。abcn,包括包括5个字符,即个字符,即a,b,c,n。如果有以下输出语句:如果有以下输出语句:coutabcnendl;输出输出:abc,然后换行。然后换行。coutI say Thank you!n;?输出什么输出什么输出什么输出什么?输出输出:I say Thank you!2.2.4 2.2.4 符号常量符号常量用一个符号名代表一个常量,称为符号常量,如用一个符号名代表一个常量,称为符号常量,如Pi,e,g。例例2.3 符号常量的使用。符号常量的使用。#

19、define PRICE 30 /注意注意define语句末尾不要加分号语句末尾不要加分号int main()int num,total;num=10;total=num*PRICE;couttotal=totalendl;return 0;程序运行结果为程序运行结果为 total=300使用符号常量的好处是:使用符号常量的好处是:(1)含义清楚含义清楚:“见名知义见名知义”。(2)在需要改变一个常量时能做到在需要改变一个常量时能做到“一改全改一改全改”。如如#define PRICE 352.3 2.3 变量变量2.3.1 2.3.1 什么是变量什么是变量在程序运行期间其值可以改变的量称为变

20、量在程序运行期间其值可以改变的量称为变量。变量具有。变量具有个基本要素:个基本要素:名字、类型和值名字、类型和值。Int a=3;图图2.62.3.2 2.3.2 变量命名规则变量命名规则变量名变量名只能由字母、数字和下划线只能由字母、数字和下划线3种字符组成,且第一种字符组成,且第一个字符必须为字母或下划线。个字符必须为字母或下划线。变量名变量名属于属于标识符(标识符(identifier),标识符,标识符用来标识变量、用来标识变量、符号常量、函数、数组、类型等实体名字。符号常量、函数、数组、类型等实体名字。标识符标识符的名字的名字都必须遵循以上规则。都必须遵循以上规则。下面列出的是合法的标

21、识符,也是合法的变量名:下面列出的是合法的标识符,也是合法的变量名:sum,average,total,day,month,Student_name,tan,BASIC,li_ling下面是不合法的标识符和变量名:下面是不合法的标识符和变量名:M.D.John,$123,#33,3G64,Ling li,C+,Zhang-ling,U.S.A.在命名时应注意以下事项:在命名时应注意以下事项:()()大写字母和小写字母是两个不同的字符。大写字母和小写字母是两个不同的字符。因此,因此,sum和和SUM是两个不同的变量名。是两个不同的变量名。()()系统规定的系统规定的保留字保留字(如(如main、

22、int、return)不可再作为变量名、函数名、类型名不可再作为变量名、函数名、类型名等其它名字使用。等其它名字使用。()()命名变量应尽量做到命名变量应尽量做到“见名知义见名知义”,这,这样有助于记忆,又增加可读性。样有助于记忆,又增加可读性。()()一般用多个单词构成的名字,常用下划线来一般用多个单词构成的名字,常用下划线来分隔单词或者中间单词的第一个字母用大写字母。分隔单词或者中间单词的第一个字母用大写字母。例如,例如,is_byte或或isByte,而不要写成而不要写成isbyte。2.3.3 2.3.3 定义变量定义变量对所有的变量对所有的变量,要,要“先定义,后使用先定义,后使用”

23、。定义变量的一般形式是定义变量的一般形式是 变量类型变量类型 变量名表列;变量名表列;变量名表列指的是一个或多个变量名的序列。如变量名表列指的是一个或多个变量名的序列。如float a,b,c,d,e;定义定义a,b,c,d,e为单精度型变量。为单精度型变量。可以在定义变量时指定它的初值可以在定义变量时指定它的初值。如。如 float a=83.5,b,c=64.5,d=81.2,e;/对变量对变量a,c,d指定了初值,指定了初值,b和和e未指定初值未指定初值2.3.4 2.3.4 为变量赋初值为变量赋初值允许在定义变量时对它赋予一个初值,这称为变允许在定义变量时对它赋予一个初值,这称为变量初

24、始化。量初始化。初值可以是常量,也可以是一个有确初值可以是常量,也可以是一个有确定值的表达式。定值的表达式。如如float a,b=5.78*3.5,c=2*sin(2.0);表示定义了表示定义了a,b,c为单精度浮点型变量,对为单精度浮点型变量,对b初始化初始化为为5.78*3,对对c初始化为初始化为2*sin(2.0)。如果对变量如果对变量未赋初值未赋初值,则该变量的初值是一个,则该变量的初值是一个不不可预测可预测的值,即该存储单元中当时的内容是不知的值,即该存储单元中当时的内容是不知道的。道的。(各次运行情况可能不同各次运行情况可能不同)int a=3;相当于以下两个语句相当于以下两个语

25、句:int a;/指定为整型变量指定为整型变量 a=3;/赋值语句,将赋给赋值语句,将赋给对多个变量赋予同一初值,必须分别指定,不能对多个变量赋予同一初值,必须分别指定,不能写成写成float a=b=c=4.5;而应写成而应写成 float a=4.5,b=4.5,c=4.5;或或float a,b,c=4.5;a=b=c;2.3.5 2.3.5 常变量常变量在定义变量时,如果加上关键字在定义变量时,如果加上关键字const,则变量的值在程则变量的值在程序运行期间序运行期间不能改变不能改变,这种变量称为常变量,这种变量称为常变量(constant variable)。例如,例如,const

26、int a=3;/用用const来声明这种变量的值不能来声明这种变量的值不能改变,指定其值始终为改变,指定其值始终为3在定义常变量时在定义常变量时必须必须同时对它初始化同时对它初始化(即指定其值即指定其值),此后,此后它的值不能再改变它的值不能再改变。常变量不能出现在赋值号的左边常变量不能出现在赋值号的左边。例。例如上面一行不能写成如上面一行不能写成const int a;a=3;/常变量不能被赋值常变量不能被赋值必须区别用必须区别用#define命令定义的命令定义的符号常量符号常量和用和用const定义的定义的常变量常变量。区别不大区别不大符号常量只是用一个符号代替一个字符串,它符号常量只是

27、用一个符号代替一个字符串,它没有类型没有类型,在内存中并不存在存储单元。在内存中并不存在存储单元。而常变量具有变量的特征,它具有类型,在内存中存在着而常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,以它命名的存储单元,与一般变量不同是常变量的值不能与一般变量不同是常变量的值不能改变改变。C+的程序员一般喜欢用的程序员一般喜欢用const定义常变量。定义常变量。2.4 C+2.4 C+的运算符的运算符(1)算术运算符算术运算符 +(加加)-(减减)*(乘乘)/(除除)%(整除求余整除求余)+(自加自加)-(自自减减)(2)关系运算符关系运算符(大于大于)(小于小于)(等于等于

28、)(大于或等于大于或等于)(小于或等于小于或等于)!(不等于不等于)()逻辑运算符逻辑运算符(逻辑与逻辑与)|(逻辑或逻辑或)!(逻辑非逻辑非)()位运算符位运算符(按位右移按位右移)(按位与按位与)|(按位或按位或)(按位异或按位异或)(按位取反按位取反)()赋值运算符赋值运算符(及其扩展赋值运算符及其扩展赋值运算符)2.5.1 2.5.1 基本的算术运算符基本的算术运算符 (加加 减减 乘乘 除除 求余求余)(加法运算符(加法运算符(双目双目运算符,如运算符,如2+3),或正值运算符),或正值运算符(单目单目运算符,如运算符,如+6)(减法运算符(减法运算符(双目双目运算符,如运算符,如3

29、-2),或负值运算符),或负值运算符(单目单目运算符,如运算符,如-5)*(乘法运算符。如(乘法运算符。如2*3)/(除法运算符。如(除法运算符。如5/2)(模运算符,或称求余运算符,(模运算符,或称求余运算符,两侧均应为整型数据两侧均应为整型数据,如如74的值为的值为3)*、/、都为双目运算符。都为双目运算符。单目运算符的优先级高于双目单目运算符的优先级高于双目运算符运算符。2.5 2.5 算术运算符与算术表达式算术运算符与算术表达式求两个数的余数的公式为:求两个数的余数的公式为:余数操作数余数操作数1操作数操作数2整商整商其中,整商是操作数其中,整商是操作数1除以操作数除以操作数2所取的整

30、数商。例如:所取的整数商。例如:5%8 余数为余数为516%8余数为余数为037%8余数为余数为5?-5%3和和5%-3的余数是否相同的余数是否相同为什么?为什么?-5%3:-5-3(-1)=-2 5%-3:5-(-3)(-1)=2因为单目运算符的优先级高于双目运算符因为单目运算符的优先级高于双目运算符两个整数两个整数相除的结果为整数,如相除的结果为整数,如5/3的结的结果值为果值为1,舍去小数部分舍去小数部分。如果如果除数或被除数中有一个为负值除数或被除数中有一个为负值,则舍,则舍入的方向是不固定的。例如,入的方向是不固定的。例如,-5/3在有的在有的C+系统上得到结果系统上得到结果-1,有

31、的,有的C+系统则给系统则给出结果出结果-2。多数编译系统采取多数编译系统采取“向零取整向零取整”的方法,的方法,即即5/3的值等于的值等于1,-5/3的值等于的值等于-1,取整,取整后向零靠拢。后向零靠拢。2.5.2 2.5.2 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性用算术用算术运算符运算符和和运算对象运算对象连接起来的、符合连接起来的、符合C+语法规则语法规则的式子,称的式子,称C+算术表达式算术表达式。运算对象包括常量、变量、。运算对象包括常量、变量、函数等。例如,下面是一个合法的函数等。例如,下面是一个合法的C+算术表达式:算术表达式:a*b/c-1.5+

32、aC+语言规定了运算符的优先级和结合性。语言规定了运算符的优先级和结合性。在求解表达式时,在求解表达式时,按运算符的优先级别按运算符的优先级别,高低次序执行,高低次序执行,例如例如先乘除后加减先乘除后加减。C+规定了各种运算符的结合方向(结合性)规定了各种运算符的结合方向(结合性)算术运算符的结合方向为算术运算符的结合方向为“自左至右自左至右”,即先左后右,即先左后右,因此因此b先与减号结合,执行先与减号结合,执行a-b的运算,再执行加的运算,再执行加c的运算。的运算。有些运算符的结合方向为有些运算符的结合方向为“自右至左自右至左”,即,即右结合性右结合性(例如赋值运算符)。(例如赋值运算符)

33、。2.5.3 2.5.3 各类数值型数据间的混合运算各类数值型数据间的混合运算在表达式中常遇到不同类型数据之间进行运算,如在表达式中常遇到不同类型数据之间进行运算,如10+a+1.5-8765.1234*b在进行运算时,不同类型的数据要先转换成同一类型在进行运算时,不同类型的数据要先转换成同一类型(系统系统自动转换自动转换),然后进行运算。转换的规则按图),然后进行运算。转换的规则按图2.7所示。所示。图图2.7假设已指定为整型变量,为假设已指定为整型变量,为float变量,为变量,为double型型变量,为变量,为long型,有下面表达式:型,有下面表达式:10+a+i*f-d/e运算次序为

34、:运算次序为:进行进行10+a的运算,先将的运算,先将转换成整数转换成整数97,运算结果为,运算结果为107。进行进行i*f的运算。先将的运算。先将i与与f都转换成都转换成double型,运算结果为型,运算结果为double型。型。整数整数107与与i*f的积相加。先将整数的积相加。先将整数107转换成双精度数(小数转换成双精度数(小数点后加若干个点后加若干个0,即,即107.00000),结果为),结果为double型。型。将变量将变量e转换成转换成double型,型,d/e结果为结果为double型。型。将将10+a+i*f的结果与的结果与d/e的商相减,结果为的商相减,结果为double

35、型。型。上述的类型转换是由上述的类型转换是由系统自动进行系统自动进行的。的。2.5.4 2.5.4 自增和自减运算符自增和自减运算符和运算符作用于变量有两种方式:一是和运算符作用于变量有两种方式:一是前缀前缀方式;方式;二是二是后缀后缀方式。方式。前缀方式为:前缀方式为:():():在使用在使用之前之前,先使的值加,先使的值加,如的原值为,则执行后,的值为,表达式如的原值为,则执行后,的值为,表达式的值也为。例如:的值也为。例如:int a=1;+a;变量变量a的值改变为的值改变为2,它是,它是a=a+1的值的值()()后缀运算符为:后缀运算符为:()():在使用:在使用之后之后,使的值加,如

36、果的,使的值加,如果的原值为,则执行后,的值为,表达式的值仍原值为,则执行后,的值为,表达式的值仍为。例如:为。例如:int b=2;b+;变量的值改变为,但,变量的值改变为,但,表达式的值为表达式的值为若有若有a=b+,则,则a=2,a=b+等价于等价于a=b;b=b+1;(;(所谓后缀)所谓后缀)而而 a=+b等价于等价于b=b+1;a=b;(所谓前缀)所谓前缀)。()()使用和运算符应注意的事项:使用和运算符应注意的事项:()()和运算符只能用于变量,而不能用于常量和运算符只能用于变量,而不能用于常量或表达式,如或()都是不合法的。或表达式,如或()都是不合法的。()()和的结合方向是和

37、的结合方向是“自右至左自右至左”,见附录。,见附录。而算术运算符的结合性是而算术运算符的结合性是“自左至右自左至右”。如果有。如果有,相当于()。,相当于()。()()和运算符使用十分灵活,但如果使用不当,和运算符使用十分灵活,但如果使用不当,可能会产生可能会产生“意想不到意想不到”的负面作用。如的负面作用。如int i=3;couti+“i+;可能大家都认为会输出可能大家都认为会输出“”,而实际上输出,而实际上输出的是的是“”。因为许多编译系统(包括。因为许多编译系统(包括Visual C+6.0和和GCC)在处理输出流时,先在处理输出流时,先按自右向按自右向左的顺序对各输出项求值左的顺序对

38、各输出项求值,最先处理的是右边的,最先处理的是右边的,得到应输出的值为,然后自增变,得到应输出的值为,然后自增变成,再处理左边的,得到应输出的值为成,再处理左边的,得到应输出的值为,然后自增变成。最后将和输出。,然后自增变成。最后将和输出。又如,若的初值为,有以下表达式:又如,若的初值为,有以下表达式:()()()()()()对该表达式的值,一般人的习惯是先求第一个括号对该表达式的值,一般人的习惯是先求第一个括号内的值,得到,再实现的自增,值变为,内的值,得到,再实现的自增,值变为,再求第二个括号内的值,得到再求第二个括号内的值,得到这样,表达式相这样,表达式相当于,即当于,即12。而实际上大

39、多数系统而实际上大多数系统把作为表达式中所把作为表达式中所有的值,因此个相加,得到表达式的值为有的值,因此个相加,得到表达式的值为。在求出整个表达式的值后再实现自增次,。在求出整个表达式的值后再实现自增次,的值变为。的值变为。应该尽量避免出现这种用法。应该尽量避免出现这种用法。要遵循要遵循安全第一、易于理解安全第一、易于理解的原则。的原则。如上面的表达式,如果编程者希望表达式的如上面的表达式,如果编程者希望表达式的结果为结果为12,同时的值为,则可以写成:,同时的值为,则可以写成:i=3;a=i+;b=i+;c=i+;d=a+b+c;执行完上述的语句后,的值为执行完上述的语句后,的值为12,的

40、,的值为。值为。xt2-7.cpp#include using namespace std;int main()int i,j,m,n;i=8;j=10;m=+i+j+;n=(+i)+(+j)+m;coutitjtmtn i=9 /m=+i +j-m=19 /j+-j=11+i -i=10 /+j-j=12 /n=(+i)+(+j)+m-n=412.5.5 2.5.5 强制类型转换运算符强制类型转换运算符在表达式运算中,不同类型的数据会在表达式运算中,不同类型的数据会自动自动地转换类型地转换类型(由短向长(由短向长 的转换)的转换)还可以利用还可以利用强制强制类型转换运算符将一个表达式转换成所

41、类型转换运算符将一个表达式转换成所需类型。例如:需类型。例如:(double)(将(将a转换成转换成double类型)类型)(int)()(x+y)(将(将x+y的值转换成整型)的值转换成整型)强制类型转换的一般形式为强制类型转换的一般形式为(类型名)(表达式)(类型名)(表达式)注意:注意:如果如果表达式表达式只是一个变量,该变量可以不只是一个变量,该变量可以不用括号括起来。用括号括起来。(double)如果该式如果该式 是一个包含多项的表达式,则是一个包含多项的表达式,则应该用括应该用括号括起来号括起来。(int)()(x+y)如果写成如果写成(int)则只将转换成整型,则只将转换成整型,

42、然后与相加。然后与相加。也可写成以下形式:也可写成以下形式:类型名(表达式)类型名(表达式)如如int(x)或或 int(x+y)例例2.4 强制类型转换。强制类型转换。#include using namespace std;int main()float x;int i;x=3.6;i=(int)x;coutx=x,i=iendl;return 0;运行结果如下:运行结果如下:3.6,i=3的类型仍为的类型仍为float型,型,值仍等于值仍等于3.6。2.6 2.6 赋值运算符与赋值表达式赋值运算符与赋值表达式2.6.1 2.6.1 赋值运算符赋值运算符 =a=3;a=b+c;2.6.2

43、2.6.2 赋值过程中的类型转换赋值过程中的类型转换如果赋值运算符两侧的类型不一致,但都是数值型或字符如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行类型转换。型时,在赋值时会自动进行类型转换。(1)将浮点型数据赋给整型变量时,舍弃其小数部分。如将浮点型数据赋给整型变量时,舍弃其小数部分。如为整型变量,执行为整型变量,执行“i=3.65”的结果是使的值为,在内的结果是使的值为,在内存中以整数形式存储。存中以整数形式存储。(截短截短)(2)将整型数据赋给浮点型变量时,数值不变,但以指数将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。如将形式存储到变量中。

44、如将23赋给赋给float型变量型变量f,按单精度指按单精度指数形式存储在数形式存储在f中。中。(延长延长)()将一个将一个double型数据赋给型数据赋给float变量时,变量时,要注意数值要注意数值范围不能溢出范围不能溢出。如。如float f;double d=123.456789e100;f=d;就会出现溢出的问题,因为超过了就会出现溢出的问题,因为超过了float型的数据范围。型的数据范围。(5)将一个将一个int、short或或long型数据赋给一个型数据赋给一个char型变量,型变量,只只将其低将其低8位原封不动地送到位原封不动地送到char型变量型变量(发生截断)。例(发生截断

45、)。例如如short int i=289;char c;c=i;/将一个将一个int型数据赋给一个型数据赋给一个char型变量型变量赋值情况见图赋值情况见图2.8。()字符数据赋给整型变量,将字符的字符数据赋给整型变量,将字符的ASCII码赋给整型码赋给整型变量。变量。图图2.8(6)将将signed(有符号有符号)型数据赋给长度相同的型数据赋给长度相同的unsigned(无无符号符号)型变量,将存储单元内容原样照搬(连原有的符号位型变量,将存储单元内容原样照搬(连原有的符号位也作为数值一起传送)。也作为数值一起传送)。例例2.5 将有符号数据传送给无符号变量。将有符号数据传送给无符号变量。#

46、include using namespace std;int main()unsigned short a;short int b=-1;a=b;couta=aendl;return 0;运行结果为运行结果为65535?赋给赋给b的值是的值是-1,怎么会得到,怎么会得到65535请看图请看图2.9所示的赋值情况。所示的赋值情况。图图2.9-1的补码形式为的补码形式为1111111111111111(即全部即全部16个二进制位个二进制位均为均为1),将它传送给,将它传送给a,而,而a是无符号型变量,是无符号型变量,16个位全个位全1是十进制的是十进制的65535。如果。如果b为正值,且在为正值

47、,且在032767之间,之间,则赋值后数值不变。则赋值后数值不变。2.6.3 2.6.3 复合的赋值运算符复合的赋值运算符在赋值符在赋值符“”之前加上其他运算符之前加上其他运算符例如例如 a+=3 等价于等价于 a=a+3 x*=y+8 等价于等价于 x=x*(y+8)x%=3 等价于等价于 x=x%3以以“a+=3”为例来说明,它相当于使为例来说明,它相当于使a进行一次自加进行一次自加3的操的操作。即先使作。即先使a加加3,再赋给,再赋给a。“x*=y+8”的作用是使的作用是使x乘以(乘以(y+8),),再赋给再赋给x。2.6.4 2.6.4 赋值表达式赋值表达式由赋值运算符由赋值运算符=将

48、一个变量和一个表达式连接起来的式将一个变量和一个表达式连接起来的式子称为子称为“赋值表达式赋值表达式”。它的一般形式为它的一般形式为 :赋值表达式中的赋值表达式中的“表达式表达式”,又可以是一个赋值表达式。,又可以是一个赋值表达式。如如a=(b=5)下面是赋值表达式的例子:下面是赋值表达式的例子:a=b=c=5 (赋值表达式值为赋值表达式值为5,a,b,c值均为值均为5)a=5+(c=6)(表达式值为表达式值为11,a值为值为11,c值为值为6)a=(b=4)+(c=6)(表达式值为表达式值为10,a值为值为10,b等于等于4,c等于等于6)a=(b=10)/(c=2)(表达式值为表达式值为5,a等于等于5,b等于等于10,c等于等于2)赋值表达式也可以包含复合的赋值运算符。如赋值表达式也可以包含复合的赋值运算符。如a+=a-=a*a也是一个赋值表达式。如果也是一个赋值表达式。如果a的初值为的初值为12,此赋值表达式,此赋值表达式的求解步骤如下:的求解步骤如下:先进行先进行“a-=a*a”的运算,它相当于的运算,它相当于a=a-a*a=12-144-132。再进行再进行“a+=-132”的运算,它相当于的运算,它相当于a=a+(-132)-132-132-264。这样的式子,了解即可,实际编程时不要写!这样的式子,了解即可,实际编程时不要写!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁