版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1ch运算符和表达式2运算符根据运算符的操作数的个数不同,可将其分为单目(一元):对一个操作数运算双目(二元):对二个操作数运算三目(三元):对三个操作数运算P.580表E.1C++常用运算符一览表第2页/共45页第1页/共45页优先级操作符结合性1::左→右2.->[]()左→右3++--~!-+&*sizeofnewdelete(类型)右→左4.*->*左→右5*/%左→右6+-左→右7<<>>左→右8<<=>>=左→右9==!=左→右10&左→右11^左→右12|左→右13&&左→右14||左→右15?:右→左16=*=/=+=-=|=<<=>>=%=&=^=&&=||=右→左17,左→右C++操作符的优先级与结合性第3页/共45页第2页/共45页4目录3.1算术运算3.2赋值运算3.3sizeof运算符3.4逗号运算符3.5自增和自减3.6位运算第4页/共45页第3页/共45页53.1算术运算数学中,算术运算包括加、减、乘、除、乘方及开方等。在C++中,算术运算是由算术运算符或库函数实现的。P.576常用的C++库函数及类库第5页/共45页第4页/共45页6算术运算符的优先级和结合性优先级运算符描述目数结合性3+正号单目从右至左-负号5*乘法双目从左至右/除法%取余6+加法-减法第6页/共45页第5页/共45页73.1.1算术运算符(1)除法运算“/
”,两个整数相除,结果为整数,否则为实数。(2)求余运算“%”,要求参与运算的两个操作数都是整型,其结果是两个数相除的余数。(3)负值的求余运算结果的符号与运算符左边的操作数的符号一致。5/-2=-22/-3=05/2.0=2.5(float)5/2=2.55%-2=1-5%2=-12%-3=2-2%-3=-2第7页/共45页第6页/共45页83.1.2优先级和结合性单目运算符的优先级最高,其次是乘、除和求余,最后是加、减。运算符的结合性是指运算符和操作数的结合方式,它有从左至右和从右至左两种。只有当两个同级运算符共用一个操作数时,结合性才会起作用。例如:c-a+b操作数a的两边的运算符相同,则先进行c-a操作除1目、3目、赋值运算符外的操作符的结合性均是从左到右。第8页/共45页第7页/共45页93.1.3数据类型转换C++采用两种方法对数据类型进行转换:一种是自动转换;另一种是强制转换。自动转换是将数据类型按从低到高的顺序自动进行转换,由于这种转换不会丢失有效的数据位,因而是安全的。强制转换是在程序中通过指定数据类型来改变,将一个变量从其定义的类型人为地改变成为另一种类型。由于这种转换可能会丢失有效的数据位,因而是不安全的。(<类型名>)<表达式><类型名>(<表达式>)
第9页/共45页第8页/共45页10类型转换的顺序整型(int)无符号长整型(unsignedlong)长整型(long)无符号整型(unsigned)短整型,字符型(short,char)双精度实型(double)单精度实型(float)长双精度实型(longdouble)第10页/共45页第9页/共45页111.自动转换字符型、整型、实型之间可以进行混合运算,其中字符型数据以ASCⅡ码的十进制数参与运算。运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换规则:类型转换由系统自动完成。转换总是朝表达数据能力更强的方向,并且转换总是逐个运算符进行的。例如:inti=10;longl=4;floatf=5.0;doubled=1.25;则:i+’a’+2*d-f/l运算结果为double型的108.25第11页/共45页第10页/共45页122.强制转换功能:将一个表达式的值转换成某个类型格式:(类型名)
(表达式)说明:括号必须,但是,如果表达式是单个操作数,其括号可以省。例如:(int)x(int)(x+y)一般,系统对操作数自动进行类型转换,但如果:a%b要求a和b都是整型,如果不是,必须先进行转换:
(int)a%b(int)a%(int)b转换后只得到一个中间变量,被转换的变量的类型不变。第12页/共45页第11页/共45页133.1.4代数式和表达式为了能让C++程序进行数值计算,还必须将代数式写合法的C++表达式。(1)注意书写规范(2)注意加圆括号(3)注意数据类型(4)注意符号^第13页/共45页第12页/共45页143.1算术运算3.2赋值运算3.3sizeof运算符3.4逗号运算符3.5自增和自减3.6位运算第14页/共45页第13页/共45页153.2赋值运算符在C++中,赋值运算是使用赋值运算符“=”来操作的,它是使用最多的双目运算符。赋值运算符“=”的作用是将赋值符右边操作数的值存储到左边操作数所在的内存空间。赋值符“=”左边的操作数必须是左值。赋值表达式的值和类型是左值的值和类型。第15页/共45页第14页/共45页163.2.1左值和右值左值(L-value):能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。例如:inta=3;右值:只能出现在赋值表达式右边的表达式。例如:inta;constintb=6;a=b+8;//a是左值,b+8为右值
b=8;//error,b是常量,只能作右值
(a=4)=8;//a=4是左值表达式,可以被赋值
32=a+2;//error,32是常量,只能作右值第16页/共45页第15页/共45页173.2.2数值截取和数值溢出赋值表达式的值和类型是左值的值和类型。在赋值表达式中,当右值的数据类型低于左值的数据类型时,C++会自动进行数据类型的转换。若右值的数据类型高于左值的数据类型且不超过左值的范围时,C++会自动进行数值截取。如果一个数值超出一个数据类型所表示的数据范围,则会出现数值溢出。第17页/共45页第16页/共45页18溢出进行算术运算时,很可能溢出结果。发生溢出是由于一个变量被赋予一个超出其数据类型表示范围的数值。数值溢出不会引起编译错误,只要分母不为0就不会引起除0运行故障,但会使运行结果发生偏差。例如:
shortintweight=42896;cout<<weight<<endl;得到的结果是42896的补码(-22640)即:42896-65536=-22640第18页/共45页第17页/共45页19[例Ex_OverFlow]一个整型溢出的例子#include<iostream>usingnamespacestd;intmain(){ shortnTotal,nNum1,nNum2; nNum1=1000; nNum2=1000; nTotal=nNum1*nNum2; cout<<nTotal<<"\n"; return0; }第19页/共45页第18页/共45页203.2.3复合赋值算术运算+=加赋值-=减赋值*=乘赋值/=除赋值%=求余赋值位运算&=位与赋值|=位或赋值^=位异或赋值<<=左移位赋值>>=右移位赋值第20页/共45页第19页/共45页213.2.3复合赋值10种复合赋值运算符都是在赋值符“=”之前加上其他运算符而构成的。
在复合赋值运算符之间不能有空格。复合运算符的优先级和赋值符的优先级一样,在C++的所有运算符中只高于逗号运算符,而且复合赋值运算符的结合性也和赋值符一样,是从右至左。第21页/共45页第20页/共45页223.2.4多重赋值多重赋值是指在一个赋值表达式中出现两个或更多的赋值符“=”。赋值表达式几乎可以出现在程序的任何地方,由于赋值运算符的等级比较低,因此这时的赋值表达式两边要加上圆括号。第22页/共45页第21页/共45页233.1算术运算3.2赋值运算3.3sizeof运算符3.4逗号运算符3.5自增和自减3.6位运算第23页/共45页第22页/共45页243.3sizeof运算符sizeof运算符的目的是返回操作数所占的内存空间大小(字节数)由于同一类型的操作数在不同的计算机中占用的存储字节数可能不同,因此sizeof运算的结果有可能不一样。sizeof(<表达式>)sizeof(<数据类型>)第24页/共45页第23页/共45页253.1算术运算3.2赋值运算3.3sizeof运算符3.4逗号运算符3.5自增和自减3.6位运算第25页/共45页第24页/共45页263.4逗号运算符逗号运算符,把多个表达式连接起来,构成一个逗号表达式在计算时,C++将从左至右逐个计算每个表达式,最终整个表达式的结果是最后计算的那个表达式的类型和值,即表达式n的类型和值。逗号运算符“,”的优先级是最低的,必要时注意加圆括号,以使逗号表达式的运算次序先于其他表达式。表达式1,表达式2,表达式3,…,表达式n第26页/共45页第25页/共45页273.4逗号运算符例:如果a=5,表达式a=3*5,a*4的值为即:a=3*5,a*4注意:表达式a=3*5,a*4与a=(3*5,a*4)的区别例:如果a=5,表达式a=(3*5,a*4)的值为逗号表达式可以嵌套:例:如果a=5,表达式(a=3*5,a*4),a+5的值为即:a=3*5,a*4这时的a=15
所以:a+5就等于206020第27页/共45页第26页/共45页283.1算术运算3.2赋值运算3.3sizeof运算符3.4逗号运算符3.5自增和自减3.6位运算第28页/共45页第27页/共45页293.5自增和自减单目运算符自增(++)和自减(--)为左值加1或减1提供一种非常有效的方法。自增(++)和自减(--)运算符既可放在左值的左边,也可以出现在左值的右边,分别称为前缀运算符和后缀运算符。前缀运算符、后缀运算符和其他的运算符组合在一起,在求值次序上就会产生根本不同。
第29页/共45页第28页/共45页30自增:++++i:先加1后使用i++:先使用后加1例:i=3;j1=++i;j1=4相当于执行:i=i+1;j1=i;j2=i++;j2=3相当于执行:j2=i;i=i+1;自减:----i:先减1后使用i--:先使用后减1例:i=3;j1=--i;j1=2相当于执行:i=i-1;j1=i;j2=i--;j2=3相当于执行:j2=i;i=i-1;3.5.1一般用法第30页/共45页第29页/共45页313.5.2前缀和后缀的区别由于前增量操作返回的值即修改之后的变量值,所以返回的仍然是一个左值。例如:inta=3;++(++a);//ok:++a是左值。a的值是5由于后增量操作返回的值是原先a的值,而后a的值已经发生变化,故返回的不能是当前a,只能是过去的a值,不能是左值。例如:inta=3;++(a++);//error:a++不是左值第31页/共45页第30页/共45页323.5.3注意事项(1)前缀自增或自减表达式的结果仍为一个左值,而后缀自增或自减表达式的结果不是左值。对于等级相同的单目运算符来说,哪一个运算符靠近操作数,就和哪个运算符先结合。(2)自增或自减运算符是两个“+”或两个“-”的一个整体,中间不能有空格。如果有多于两个“+”或两个“-”连写的情况,编译时会首先识别自增或自减运算符。(3)在有自增或自减运算符的混合运算中,一要注意次序,二要注意左值对应于一块内存空间这个特性(4)在cout语句中的自增或自减运算中,不同编译器的处理方式也是不一样的。第32页/共45页第31页/共45页33操作符的识别编译器采用贪吃法则如果有多于两个+或两个-连写的情况,则编译首先识别前面两个+或-为增量或减量操作符。
inta=3,b=5,c;c=a+b;//ok;c=a++b;//错:理解为a++bc=a+++b;//ok:a+++bc=a++++b;//错:理解为a++++bc=a+++++b;//错:理解为a+++++b第33页/共45页第32页/共45页343.1算术运算3.2赋值运算3.3sizeof运算符3.4逗号运算符3.5自增和自减3.6位运算第34页/共45页第33页/共45页353.6位运算运算符描述位逻辑运算~按位求反,单目&按位与,双目^按位异或,双目|按位或,双目移位运算<<左移,双目低位补0,移出的高位舍弃>>右移,双目高位补0或符号位,第35页/共45页第34页/共45页363.6.1位逻辑运算位与操作&将两个操作数每一位做与操作
shorta=12;//00001100shortb=6;//00000110c=a&b;//00000100=4,比较a&&b位或操作|将两个操作数每一位做或操作
inta=12;//00001100intb=6;//00000110c=a|b为//00001110=14,比较a||b第36页/共45页第35页/共45页373.6.1位逻辑运算位异或操作^将两个操作数每一位做异或操作。若两个操作数相等,值为0;若两个操作数不等,值为1。
inta=12;//00001100intb=6;//00000110c=a^b;//00001010=10位反操作~将一个操作数的每一位取反,0变1,1变0。
inta=12;//00001100b=~a//11110011第37页/共45页第36页/共45页38左移操作
<<将整数最高位挤掉,在右端补0。
inta=12;//00001100a=a<<1;//00011000=24右移操作>>对于有符号数,若最高位是1,则高位挤进去1;最高位是0,则高位挤进去0;对于无符号数,则一律高位挤进去0;
shortinta=-2;//1111111111111110a=a>>1;//1111111111111111=-1unsignedshortintb=65535;
//1111111111111111b=b>>1;//0111111111111111=327673.6.2移位运算第38页/共45页第37页/共45页39[例Ex_BitOP]位运算实例#include<iostream>#include<iomanip>
//由于后面用到setw格式算子,故添加此头文件usingnamespacestd;voidout2(unsignedn)
//定义一个函数,将一个无符号整型数n按二进制数输出{ un
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年平顶山职业技术学院高职单招职业适应性测试模拟试题带答案解析
- 2026 年高职音乐表演(音乐制作)试题及答案
- 2026 年高职医学影像技术(影像设备操作)试题及答案
- 共享经济股权协议书模板
- 地层测试工安全生产基础知识考核试卷含答案
- 艾力绅导航协议书线
- 未来五年互联网农林牧渔企业ESG实践与创新战略分析研究报告
- 未来五年沿海堤防管理服务企业县域市场拓展与下沉战略分析研究报告
- 未来五年地中飞机秤企业县域市场拓展与下沉战略分析研究报告
- 身后互不继承遗产协议书
- 肿瘤化疗导致的中性粒细胞减少诊治中国专家共识解读
- 2025年查对制度考核考试题库(答案+解析)
- 云南省2025年普通高中学业水平合格性考试历史试题
- 骨关节疾病危害课件
- 《再见2025欢迎2026》迎新年元旦主题班会
- 猫屎咖啡介绍
- DB54T 0540-2025 区域性强降雨气象评估标准
- 2025-2026 学年三年级 道德与法治 随堂检测 试卷及答案
- 广西贵百河2025-2026学年高一上学期12月联考语文试题
- 《手术室护理实践指南(2025版)》
- 四川省2025年高职单招职业技能综合测试(中职类)汽车类试卷(含答案解析)
评论
0/150
提交评论