第三课 C++基本语法_第1页
第三课 C++基本语法_第2页
第三课 C++基本语法_第3页
第三课 C++基本语法_第4页
第三课 C++基本语法_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三课运算符与表达式

1SchoolofInformationandEngineering,ShenzhenUniversity1.基本概念1)运算:对常量或变量进行加工的过程。

2)运算符:表示各种不同运算的符号。3)操作数:参与运算的数据。4)C++的基本运算:算术运算、关系运算、逻辑运算、位运算等2SchoolofInformationandEngineering,ShenzhenUniversity5)一元运算:只需一个操作数参加的运算,对应运算符为一元运算符;二元运算:需要两个操作数参加的运算,对应运算符为二元运算符;三元运算:需要三个操作数参加的运算,对应运算符为三元运算符。3SchoolofInformationandEngineering,ShenzhenUniversity6)表达式:由操作数和运算符按一定语法形式组成的符号序列。表达式的值:表达式经过运算后产生的一个确定值。表达式的类型:经过运算求出表达式的值所属于的类型。表达式的分类:算术表达式、关系表达式、赋值表达式、逻辑表达式、逗号表达式。一般数学上的表达式和C++表达式在书写方式上有时有所不同。

t=(X1+X2)/(Y1+Y2)4SchoolofInformationandEngineering,ShenzhenUniversity2.算术运算符与算术表达式1)算术运算符:+、-、*、/、%、++、――;+、-、*与一般表达式相同;/(除):a/b时,要求b≠0;若a、b均为整数时,为整除,如5/3=1,3/5=0;若a、b不全为整数时,为实数除;如5/2=2.5,15/2=7.5。%(求模留余):a%b要求a、b均为整数且b≠0,如:5%2=1,3%3=0,5SchoolofInformationandEngineering,ShenzhenUniversity++(自增1):单独使用时与出现位置无关:++a;代表a=a+1;(前缀运算符)a++; 代表a=a+1;(后缀运算符)在表达式中使用时,与出现位置有关:b=++a; 代表a=a+1;然后b=a;b=a++; 代表b=a;然后a=a+1;――(自减1):类似++。6SchoolofInformationandEngineering,ShenzhenUniversity加1运算符例子:#include<limits>#include<iostream>usingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){intnum=INT_MAX-2;intcnt=0;cout<<"IntegeroverfolwinC++:"<<endl;cout<<"Incrementingfrom"<<num<<endl;while(cnt<5){num++;cnt++;cout<<cnt<<""<<num<<endl;}cout<<"Thankyouforworryingaboutintegerlimits"<<endl;

getchar();return0;}7SchoolofInformationandEngineering,ShenzhenUniversity2)赋值运算符与赋值表达式使变量获得初值:赋值语句以及初始化赋值语句(每个语句以分号结束):doublex,y,z;x=2;y=1;z=3;初始化:

doublex=2,y=1;8SchoolofInformationandEngineering,ShenzhenUniversityC++提供了几个赋值运算符,最简单的赋值运算符就是“=”。带有赋值运算符的表达式被称为赋值表达式。例如,n=n+5就是一个赋值表达式。赋值表达式的作用就是将等号右边表达式的值赋给等号左边的对象。赋值表达式的类型为等号左边对象的类型,其结果的值为等号左边对象被赋值后的值,运算的结合性为自右向左。a=5表达式值为5。a=b=c=5表达式值为5,a,b,c均为5。//表达式从右向左运算,在c被更新为5后,表达式c=5的值为5,接着b的值被更新为5,最后a被赋值为5。9SchoolofInformationandEngineering,ShenzhenUniversitya=(b=4)+(c=6)表达式值为10,a为10,b为4,c为6。其他表达方式表示实际含义a+=1a=a+1x-=y+5x=x-(y+5)x*=b-1x=x*(b-1)x/=b+cx=x/(b+c)x%=b+2x=x%(b+2)x-=1x=x-1x-=y*zx=x-(y*z)10SchoolofInformationandEngineering,ShenzhenUniversity3.关系运算符与关系表达式1)关系运算符:表示两操作数之间关系,共六种:<、<=、>、>=、==、!=。2)关系表达式:用关系运算符把操作数连接起来构成的表达式3)关系表达式的值--运算的结果是整数类型int。人们习惯理解:关系成立——true(真);关系不成立——false(假)。计算机内部表示(数字化表示):关系成立——用1表示;关系不成立——用0表示。11SchoolofInformationandEngineering,ShenzhenUniversity若已有a>b,则if(a>b)等价于if(1)若已有a<b,则if(a>b)等价于if(0)若已知a>b,且a≠0,则while(a>b){……}等价于while(1){……}也等价于while(a){……}

12SchoolofInformationandEngineering,ShenzhenUniversity注意将相等运算符‘==’误写为‘=’不是一个语法错误。其结果会产生一个合法的C++表达式,编译程序会无警告地产生错误代码。记住要检查条件表达式中是否存在这样的错误。由两个符号组成的关系运算符是一个完整的单词,不要在关系运算符中间再插入空格或其它符号。13SchoolofInformationandEngineering,ShenzhenUniversity4.逻辑运算符与逻辑表达式1)逻辑运算符:&&(与),||(或),!(非)。运算规则:只按布尔量规则,既只判操作数是为0还是非0,其结果也只是为0或1;aba&&b

a||b!aNNNNYNYNYYYNNYNYYYYN

其中:N为0,Y为1。逻辑与运算符的优先级高于逻辑或运算符。可以使用圆括号来帮助维护人员理解复杂的逻辑表达式的含义。14SchoolofInformationandEngineering,ShenzhenUniversity5.位运算符1)运算符:&(与)、|(或)、~(非)、<<(左移)、>>(右移)、^(异或)

2)运算规则:二进制位运算

aba&b

a|b~aa^b000010010111100101111100

异或也称“按位加”,相当于仅一个二进制位的加法。15SchoolofInformationandEngineering,ShenzhenUniversity与运算的规则:如果两个操作数的对应位均为1,结果位就为1;如果至少有一个(或两个)操作数的对应位为0,其结果就为0。或运算的规则:如果一个或两个操作数的对应位是1,结果位就为1;如果有两个操作数的对应位均为0,其结果才为0。异或运算的规则:如果只有一个操作数对应位为1,结果就为1;如果两个操作数的对应位相同(均为0或1),其结果为0。取反运算的规则:如果操作数位是1,结果位就是0;如果操作数位是0,结果位就是1。16SchoolofInformationandEngineering,ShenzhenUniversity3)左移<<和右移>>二进制位运算,注意带符号数在计算机内是补码表示设a为25(字长为16bit)25 0000000000011001

b=a<<2b为0000000001100100 (100)10相当于25*4=100

b=a>>2b为00000000

00000110 (6)10相当于25/4(整除)17SchoolofInformationandEngineering,ShenzhenUniversity演示位运算#include<iostream>usingnamespacestd;intmain(){ unsignedcharbit1=0x5A,bit2=0xB7; cout<<hex; cout<<"bit1&bit2is:"<<int(bit1&bit2)<<'\n'; cout<<"bit1&0x20is:"<<int(bit1&0x20)<<'\n'; cout<<"bit1&0xDFis:"<<int(bit1&0xDF)<<'\n'; cout<<"bit1|bit2is:"<<int(bit1|bit2)<<'\n'; cout<<"bit1|0x20is:"<<int(bit1|0x20)<<'\n'; cout<<"(bit1^bit2)^bit2is:"<<int((bit1^bit2)^bit2)<<'\n'; cout<<"bit1<<2is:"<<int(bit1<<2)<<'\n'; cout<<"bit1>>3is:"<<int(bit1>>3)<<'\n'; cout<<dec; getchar(); return0;}18SchoolofInformationandEngineering,ShenzhenUniversity程序运行后的输出结果为:

bit1&bit2is:12

bit1&0x20is:0

bit1&0xDFis:5a

bit1|bit2is:ff

bit1|0x20is:7a

(bit1^bit2)^bit2is:5a

bit1<<2is:168

bit1>>3is:b19SchoolofInformationandEngineering,ShenzhenUniversity6.条件运算符与条件表达式运算符?:使用形式:(条件式)?表达式1:表达式2;

含义:

条件式之值为非0(条件式成立),取表达式1的值为结果值;

条件式之值为0(表达式不成立),取表达式2的值为结果值。z=(a>b)?a:b;相当于if(a>b)z=a;elsez=b;20SchoolofInformationandEngineering,ShenzhenUniversity7.sizeof运算

1)含义:计算操作数所占存储空间长度,计算结果以字节为单位,计算结果的类型是unsigned。

2)使用形式:sizeof(表达式)求出表达式值所属的类型,判断该类型所占字节数。sizeof(类型)求出所指类型所占字节数21SchoolofInformationandEngineering,ShenzhenUniversity#include<iostream>usingnamespacestd;voidmain(){ constfloatpi=3.14;charch=0x5A;inti; cout<<"(1)"<<sizeof(pi)<<"\n";//pi为float,结果为 cout<<"(2)"<<sizeof(ch)<<"\n";//ch为char,结果为 cout<<"(3)"<<sizeof(ch&&(pi||0))<<"\n";//或结果为,与结果为,最后为字节 cout<<"(4)"<<sizeof(i=4+pi*8)<<"\n";//表达式结果赋值给i,i为int,结果为

getchar();}

最后输出形式:(1)4

(2)1

(3)2

(4)2

22SchoolofInformationandEngineering,ShenzhenUniversity8.逗号运算符与逗号表达式

1)运算符:,

2)表达式:用逗号把表达式分隔开:表达式1,表达式2,表达式3,……表达式k;

取最后一个表达式(表达式k)的值作为整个逗号表达式的值

设已有

inta,b,c,d;a=10;b=20;c=50;

d=(a+5,b+c,a+b+c);最后d的值为a+b+c=10+20+50=80

23SchoolofInformationandEngineering,ShenzhenUniversity3)作用:根据逗号表达式的特点,注意在对逗号表达式求值过程中,各变量的值有没有被修改:例如:inta,b,c,d;a=10;b=20;c=50;d=(a=a+5,b++,a+b+c);此时得d为86(因为已修改了a和b,d=15+21+50=86)当在无意中使用逗号运算符时,就会很危险。而由于代码不违反C++的语法规则,因此由不正确的代码导致的结果不会被认为有语法错误。

24SchoolofInformationandEngineering,ShenzhenUniversity9.混合型表达式:隐藏的危险C++是一种强类型语言。如果上下文要使用某种类型的值,那么使用另外一种类型的值来代替就是一个语法错误。这个重要的原则使得程序员不需要花费太多的努力就可以排除错误:编译程序会告诉程序员代码是不正确的,而不必让程序员通过艰苦的运行测试来发现错误。25SchoolofInformationandEngineering,ShenzhenUniversity10.运算符的优先级与结合性1)运算符的优先级:语言系统把众多运算符分为若干个组,当一个表达式中出现不同组的运算符时,依照一定的先后次序执行,这种先后次序就是运算符的优先级(这种优先级由系统事先设置)。

2)运算符的结合性:同一个级别的运算符在表达式中出现时,计算的先后次序。

3)优先级规则:先括号内后括号外;不同级别时级别高优先;同一级别时依结合性次序;4)启发:在编程时,加上适当括号,可提高程序可读性。26SchoolofInformationandEngineering,ShenzhenUniversity类型间的转换关系

1.问题

一个表达式中出现不同类型的操作数进行运算,依什么规则来处理其类型。C++是一种强类型语言。这就意味着如果上下文要使用某种类型的值,那么使用另外一种类型的值来代替就是一个语法错误。这个重要的原则使得程序员不需要花费太多的努力就可以排除错误:编译程序会告诉程序员代码是不正确的,而不必让程序员通过艰苦的运行测试来发现错误。然而对于数值类型来说,C++是弱类型的。这与其它强语言不同类型。27SchoolofInformationandEngineering,ShenzhenUniversity以下代码在C++中是可以接受的(也是常见的)

doublesum;......sum=1;

//nosyntaxerror从现代强类型语言的观点来看,编译时会指出这是一个由程序员造成的不一致性的明显错误。28SchoolofInformationandEngineering,ShenzhenUniversity2.做法:在运算开始执行之前先进行类型转换使之一致。在使用混合类型的表达式中有三种类型转换:

1)整数升级(integralpromotion)2)隐式类型转换

3)显式类型转换(类型转换)29SchoolofInformation

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论