1.4操作符(运算符).docx_第1页
1.4操作符(运算符).docx_第2页
1.4操作符(运算符).docx_第3页
1.4操作符(运算符).docx_第4页
1.4操作符(运算符).docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1.4 操作符/运算符(Operators)前面已经学习了变量和常量,我们可以开始对它们进行操作,这就要用到C+的操作符。有些语言,很多操作符都是一些关键字, 比如add, equals等等。C+的操作符主要是由符号组成的。这些符号不在字母表中,但是在所有键盘上都可以找到。这个特点使得C+程序更简洁,也更国际化。运算符是C+语言的基础,所以非常重要。你不需要背下所有这一小节的内容,这些细节知识仅供你以后需要时参考 。赋值Assignation (=)赋值运算符的功能是将一个值赋给一个变量。a = 5; 将整数5赋给变量a。= 运算符左边的部分叫做lvalue (left value),右边的部分叫做rvalue (right value)。lvalue 必须是一个变量,而右边的部分可以是一个常量,一个变量,一个运算(operation)的结果或是前面几项的任意组合。 有必要强调赋值运算符永远是将右边的值赋给左边,永远不会反过来。a = b; 将变量b (rvalue)的值赋给变量a (lvalue),不论a当时存储的是什么值。同时考虑到我们只是将b的数值赋给a,以后如果b的值改变了并不会影响到a的值. 例如:如果我们使用以下代码(变量值的变化显示在绿色注释部分): / 赋值符号例子#include using namespace std;int main () int a, b; / a:?, b:? a = 10; / a:10, b:? b = 4; / a:10, b:4 a = b; / a:4, b:4 b = 7; / a:4, b:7 cout a:; cout a; cout b:; cout =, =, &=, =, |=)C+以书写简练著称的一大特色就是这些组合运算符compound assignation operators (+=, -=, *= 和 /= 及其他) ,这些运算符使得只用一个基本运算符就可改写变量的值:value += increase; 等同于 value = value + increase;a -= 5; 等同于 a = a - 5;a /= b; 等同于 a = a / b;price *= units + 1; 等同于 price = price * (units + 1);其他运算符以此类推。例如:/ 组合运算符例子#include using namespace std;int main () int a, b=3; a = b; a+=2; / 相当于 a=a+2 cout , =, 大于Greater than= 大于等于Greater or equal than 4)将返回true.(3 != 2)将返回true.(6 = 6)将返回true.(5 = c)将返回true 因为它实际是(2*3 = 6)(b+4 a*c)将返回false因为它实际是(3+4 2*6)(b=2) = a)将返回true.注意:运算符= (单个等号)不同于运算符= (双等号)。第一个是赋值运算符(将等号右边的表达式值赋给左边的变量);第二个(=)是一个判断等于的关系运算符,用来判断运算符两边的表达式是否相等。因此在上面例子中最后一个表达式(b=2) = a),我们首先将数值2赋给变量b,然后把它和变量a进行比较。因为变量a中存储的也是数值2,所以整个运算的结果为true。 在ANSI-C+标准出现之前的许多编译器中,就像C语言中,关系运算并不返回值为真true或假false的bool值,而是返回一个整型数值最为结果,它的数值可以为0,代表false或一个非0数值(通常为1)来代表true。 逻辑运算符Logic operators ( !, &, | )运算符 ! 等同于boolean 运算NOT (取非),它只有一个操作数(operand),写在它的右边。它做的唯一工作就是取该操作数的反面值,也就是说如果操作数值为真true,那么运算后值变为假false,如果操作数值为假false,则运算结果为真true。它就好像是说取与操作数相反的值。例如:!(5 = 5)返回false,因为它右边的表达式(5 = 5)为真true.!(6 = 4)返回true因为(6 6) ) 返回false ( true & false ).( (5 = 5) | (3 6) 返回true ( true | false ). 条件运算符Conditional operator ( ? )条件运算符计算一个表达式的值并根据表达式的计算结果为真true或假false而返回不同值。它的格式是:condition ? result1 : result2 (条件?返回值1:返回值2) 如果条件condition 为真true,整个表达式将返回esult1,否则将返回result2。7=5 ? 4 : 3返回3,因为7不等于5.7=5+2 ? 4 : 3返回4,因为7等于5+2.53 ? a : b返回a,因为5大于3.ab ? a : b返回较大值,a 或b./ 条件运算符例子#include using namespace std;int main () int a,b,c; a=2; b=7; c = (ab) ? a : b; cout b)运算值为假(false),所以整个表达式(ab)?a:b要取分号后面的值,也就是b的值7。因此最后输出 c 的值为7。逗号运算符 ( , )逗号运算符 (,) 用来分开多个表达式,并只取最右边的表达式的值返回。例如有以下代码:a = (b=3, b+2); 这行代码首先将3赋值给变量b,然后将 b+2 赋值给变量 a。所以最后变量a 的值为5,而变量b的值为3。位运算符Bitwise Operators ( &, |, , , )位运算符以比特位改写变量存储的数值,也就是改写变量值的二进制表示: opasmDescription&AND 逻辑与 Logic AND| OR逻辑或Logic OR XOR逻辑异或Logical exclusive OR NOT对1取补(位反转)Complement to one (bit inversion) SHR右移Shift Right变量类型转换运算符Explicit type casting operators变量类型转换运算符可以将一种类型的数据转换为另一种类型的数据。在写C+中有几种方法可以实现这种操作,最常用的一种,也是与C兼容的一种,是在原转换的表达式前面加用括号()括起的新数据类型:int i; float f = 3.14;i = (int) f; 以上代码将浮点型数字3.14转换成一个整数值(3)。这里类型转换操作符为(int)。在C+中实现这一操作的另一种方法是使用构造函数constructor 的形式:在要转换的表达式前加变量类型并将表达式括在括号中:i = int ( f );以上两种类型转换的方法在C+中都是合法的。另外ANSI-C+针对面向对象编程(object oriented programming)增加了新的类型转换操作符 (参考Section 5.4, Advanced class type-casting).sizeof()这个运算符接受一个输入参数,该参数可以是一个变量类型或一个变量自己,返回该变量类型(variable type) 或对象(object)所占的字节数: a = sizeof (char); 这将会返回1给a,因为char是一个常为1个字节的变量类型。sizeof返回的值是一个常数,因此它总是在程序执行前就被固定了。 其它运算符在本教程后面的章节里我们将看到更多的运算符,比如指向指针的运算或面向对象编程特有的运算,等等,我们会在它们各自的章节里进行详细讨论。运算符的优先度 Precedence of operators当多个操作数组成复杂的表达式时,我们可能会疑惑哪个运算先被计算,哪个后被计算。例如以下表达式: a = 5 + 7 % 2 我们可以怀疑它实际上表示:a = 5 + (7 % 2) 结果为6,还是 a = (5 + 7) % 2 结果为0?正确答案为第一个,结果为6。每一个运算符有一个固定的优先级,不仅对数学运算符(我们可能在学习数学的时候已经很了解它们的优先顺序了),所有在C+中出现的运算符都有优先级。从最从最高级到最低级,运算的优先级按下表排列:优先级Level操作符Operator说明Description结合方向Grouping1:范围从左到右2() . - + - dynamic_cast static_cast reinterpret_cast const_cast typeid后缀从左到右3+ - ! sizeof new delete一元(前缀)从右到左* &指针和取地址 + -一元符号4(type)类型转换 从右到左5.* -*指向成员的指针从左到右6* / %乘、除、取模 从左到右7+ -加减从左到右8位移从左到右9 =关系操作符从左到右10= !=等于、不等于从左到右11&按位与运算从左到右12按位异或运算从左到右13|按位或运算从左到右14&逻辑与运算从左到右15|逻辑或运算从左到右16?:条件运算从右到左17= *= /= %= += -= = = &= = |=赋值运算从右到左18,逗号从左到右结合方向Grouping定义了当有同优先级的多个运算符在一起

温馨提示

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

最新文档

评论

0/150

提交评论