鸡啄米:C++编程入门系列之五(运算符和表达式)
转载自:http://www.jizhuomi.com/software/32.html
上一讲鸡啄米给大家讲了一些数据类型,这一讲主要讲解编程入门知识-运算符和表达式。运算符,顾名思义,就是用于计算的符号,比如+,-,*,/。表达式是用于计算的公式,由运算符、运算量(操作数)和括号组成。
有些运算符需要两个操作数,使用形式为:操作数 运算符 操作数,这样的运算符就叫做二元运算符或双目运算符,只需要一个操作数的运算符叫做一元运算符或单目运算符。运算符具有优先级和结合性。如果一个表达式中有多个运算符则先辈行优先级高的运算,后举行优先级低的运算。结合性就是指当一个操作数左边和右边的运算符优先级相同时按什么样的顺序举行运算,是自左向右还是自右向左,下面会具体讲到。鸡啄米来具体先容几种类型的运算符和表达式。
1.算术运算符和算术表达式
算术运算符包罗根本算术运算符和自增自减运算符。由算术运算符、操作数和括号组成的表达式称为算术表达式。根本算术运算符有:+(加),-(减或负号),*(乘),/(除),%(求余)。其中"-"作为负号时为一元运算符,作为减号时为二元运算符。优先级跟我们数学里的是一样的,先乘除,后加减。"%"是求余运算,它的操作数必须是整数,比如a%b是要计算a除以b后的余数,它的优先级与"/"相同,这里要注意的是,"/"用于两个整数相除时,结果含有小数的话小数部分会舍掉,比如2/3的结果是0。
C++的自增运算符"++"和自减运算符"--"都是一元运算符,这两个运算符都有前置和后置两种形式,比如i++是后置,--j是前置。无论是前置还是后置都是将操作数的值增1或减1后再存到操作数内存中的位置。如果i的原值是2,则i++这个表达式的结果是2,i的值则变为3,。如果j的原值也是2,则--j这个表达式的结果是1,j的值也变为1。自增或自减表达式包罗到更复杂的表达式中时,比如假设i的原值是1,coutd)的值为false。
5.条件运算符和条件表达式
C++中唯一的一个三元运算符是条件运算符"?"。条件表达式的使用形式是:表达式1?表达式2:表达式3。表达式1是bool类型的,表达死2,3可以是任何类型,而且类型可以差别。条件表达式的类型是表达式2和3中较高的类型,类型的高低后面先容。条件表达式会先解表达式1,如果表达式1的值是true,则解表达式2,表达式2的值就是条件表达式的值,而如果表达式1的值是false,则解表达式3,其值就是条件表达式的最终结果。比如:(a>2则需要将最右边两个0移出,最左边补两个1,因为符号位是1,则结果为11111110,对其再求补码就得到最终结果-2。
8.混合运算时数据类型的转换。
表达式中的类型转换分为:隐含转换和逼迫转换。
在算术运算和关系运算中如果参与运算的操作数类型不一样,则系统会对其举行类型转换,这是隐含转换,转换的原则就是将低类型的数据转换为高类型数据。各类型从低到高依次为char,short,int,unsigned int,long,unsigned long,float,double。类型越高范围越大,精度也越高。隐含转换是安全的,因为没有精度损失。逻辑运算符的操作数必须是bool型,如果不是就需要将其转换为bool型,非0数据转换为true,0转换为false。位运算操作数必须是整数,如果不是也会自动举行类型转换,也是低类型数据转换为高类型数据。赋值运算要求赋值运算符左边的值和右边的值类型相同,差别的话也要举行自动转换,但这个时候不会遵从上面的原则而是一律将右值转换为左值的类型。比如,int iVal; float fVal; double dVal;则dVal=iVal*fVal;计算时先将iVal转换为跟fVal一样的float型,乘法的结果再转换为double型。
逼迫类型转换是由类型说明符和括号来实现的,使用形式为:类型说明符(表达式) 或 (类型说明符)表达式。它是将表达式的结果类型逼迫转换为类型说明符指定的类型。比如,float fVal=1.2; int iVal = (int)fVal;计算后面表达式的值时会将1.2逼迫转换成1,舍弃小数部分。
好了,鸡啄米本日就讲到这里了,又是很重要的基础知识,以后学习中有很多地方会混淆,注意要记牢哦。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]