1.4操作符(运算符)

发布时间:2019-08-15 08:46:10

1.4操作符(运算符)

操作符运算符()

前面已经学习了变量和常量,我们可以开始对它们进行操作,这就要用到的操作符。有些语言,很多操作符都是一些关键字, 比如, 等等。的操作符主要是由符号组成的。这些符号不在字母表中,但是在所有键盘上都可以找到。这个特点使得程序更简洁,也更国际化。运算符是语言的基础,所以非常重要。

你不需要背下所有这一小节的内容,这些细节知识仅供你以后需要时参考 。

赋值 ()

赋值运算符的功能是将一个值赋给一个变量。

;

将整数赋给变量。 运算符左边的部分叫做 ( ),右边的部分叫做 ( )。 必须是一个变量,而右边的部分可以是一个常量,一个变量,一个运算()的结果或是前面几项的任意组合。 b5E2R。b5E2R。

有必要强调赋值运算符永远是将右边的值赋给左边,永远不会反过来。

;

将变量 ()的值赋给变量 (),不论当时存储的是什么值。同时考虑到我们只是将的数值赋给,以后如果的值改变了并不会影响到的值. p1Ean。p1Ean。

例如:如果我们使用以下代码(变量值的变化显示在绿色注释部分):

以上代码结果是的值为, 的值为。最后一行中的值被改变并不会影响到,虽然在此之前我们声明了 ; (从右到左规则 )。 DXDiT。DXDiT。

拥有而其他语言没有的一个特性是赋值符 () 可以被用作另一个赋值符的 (或的一部分) 。例如:

( );

等同于:

;

它的意思是:先将赋给变量,然后把前面对的赋值运算的结果(即)加上再赋给变量,这样最后中的值为。因此,下面的表达式在中也是正确的: RTCrp。RTCrp。

; 将同时赋给个变量, 和。

数学运算符 ( , , *, , )

语言支持的种数学运算符为:

* 乘

取模

加减乘除运算想必大家都很了解,它们和一般的数学运算符没有区别。

唯一你可能不太熟悉的是用百分号()表示的取模运算()。取模运算是取两个整数相除的余数。例如,如果我们写 ;,变量的值将会为结果,因为是除以的余数。5PCzV。5PCzV。

组合运算符 (, , *, , , >>, <<, , ^, )

以书写简练著称的一大特色就是这些组合运算符 (, , * 和 及其他) ,这些运算符使得只用一个基本运算符就可改写变量的值:jLBHr。jLBHr。

; 等同于 ;

; 等同于 ;

; 等同于 ;

* ; 等同于 * ( );

其他运算符以此类推。例如:

递增和递减

书写简练的另一个例子是递增()运算符 ()和递减() 运算符()。它们使得变量中存储的值加或减。它们分别等同于和。因此:xHAQX。xHAQX。

;

在功能上全部等同,即全部使得变量的值加。

它的存在是因为最早的编译器将以上三种表达式的编译成不同的机器代码,不同的机器代码运行速度不一样。现在,编译器已经基本自动实行代码优化,所以以上三种不同的表达方式编译成的机器代码在实际运行上已基本相同。LDAYt。LDAYt。

这个运算符的一个特点是它既可以被用作前缀,也可以被用作后缀,也就是说它既可以被写在变量标识的前面(),也可以被写在后面()。虽然在简单表达式如或中,这两种写法代表同样的意思,但当递增或递减的运算结果被直接用在其它的运算式中时,它们就代表非常不同的意思了:当递增运算符被用作前缀 () 时,变量的值线增加,然后再计算整个表达式的值,因此增加后的值被用在了表达式的计算中;当它被用作后缀 ()时,变量的值在表达式计算后才增加,因此在增加前所存储的值被用在了表达式的计算中。注意以下两个例子的不同:Zzz6Z。Zzz6Z。

在第一个例子中,在它的值被赋给之前增加。而在第二个例子中原来的值被赋给 然后的值才加变为。

关系运算符 ( , , >, <, >, < )

我们用关系运算符来比较两个表达式。如 标准中指出的,关系预算的结果是一个值,根据运算结果的不同,它的值只能是真或。 dvzfv。dvzfv。

例如我们想通过比较两个表达式来看它们是否相等或一个值是否比另一个的值大。以下为的关系运算符:

下面你可以看到一些实际的例子:

当然,除了使用数字常量,我们也可以使用任何有效表达式,包括变量。假设有, 和,

注意:运算符 (单个等号)不同于运算符 (双等号)。第一个是赋值运算符(将等号右边的表达式值赋给左边的变量);第二个()是一个判断等于的关系运算符,用来判断运算符两边的表达式是否相等。因此在上面例子中最后一个表达式(() ),我们首先将数值赋给变量,然后把它和变量进行比较。因为变量中存储的也是数值,所以整个运算的结果为。 rqyn1。rqyn1。

在标准出现之前的许多编译器中,就像语言中,关系运算并不返回值为真或假的值,而是返回一个整型数值最为结果,它的数值可以为,代表""或一个非数值(通常为)来代表""。 Emxvx。Emxvx。

逻辑运算符 ( !, , )

运算符 ! 等同于 运算 (取非),它只有一个操作数(),写在它的右边。它做的唯一工作就是取该操作数的反面值,也就是说如果操作数值为真,那么运算后值变为假,如果操作数值为假,则运算结果为真。它就好像是说取与操作数相反的值。例如:SixE2。SixE2。

逻辑运算符和是用来计算两个表达式而获得一个结果值。它们分别对应逻辑运算中的与运算 和或运算。它们的运算结果取决于两个操作数()的关系:6ewMy。6ewMy。

例如 :

( ( ) ( > ) ) 返回 ( ).
( ( ) ( > )) 返回 ( ). kavU4。kavU4。

条件运算符 ( ? )

条件运算符计算一个表达式的值并根据表达式的计算结果为真或假而返回不同值。它的格式是:

? : (条件?返回值:返回值)

如果条件 为真,整个表达式将返回,否则将返回。

上面的例子中的值为,的值为,所以表达式(>)运算值为假(),所以整个表达式(>)要取分号后面的值,也就是的值。因此最后输出 的值为。y6v3A。y6v3A。

逗号运算符 ( , )

逗号运算符 (,) 用来分开多个表达式,并只取最右边的表达式的值返回。
例如有以下代码:

(, );


这行代码首先将赋值给变量,然后将 赋值给变量 。所以最后变量 的值为,而变量的值为。

位运算符 ( , , ^, , <<, >> )

位运算符以比特位改写变量存储的数值,也就是改写变量值的二进制表示:

变量类型转换运算符

变量类型转换运算符可以将一种类型的数据转换为另一种类型的数据。在写中有几种方法可以实现这种操作,最常用的一种,也是与兼容的一种,是在原转换的表达式前面加用括号()括起的新数据类型:M2ub6。M2ub6。

;
() ;

以上代码将浮点型数字转换成一个整数值()。这里类型转换操作符为()。在中实现这一操作的另一种方法是使用构造函数 的形式:在要转换的表达式前加变量类型并将表达式括在括号中:0YujC。0YujC。

( );

以上两种类型转换的方法在中都是合法的。另外针对面向对象编程( )增加了新的类型转换操作符 (参考 , ).eUts8。eUts8。

()

这个运算符接受一个输入参数,该参数可以是一个变量类型或一个变量自己,返回该变量类型( ) 或对象()所占的字节数: sQsAE。sQsAE。

();

这将会返回给,因为是一个常为个字节的变量类型。

返回的值是一个常数,因此它总是在程序执行前就被固定了。

其它运算符

在本教程后面的章节里我们将看到更多的运算符,比如指向指针的运算或面向对象编程特有的运算,等等,我们会在它们各自的章节里进行详细讨论。GMsIa。GMsIa。

运算符的优先度

当多个操作数组成复杂的表达式时,我们可能会疑惑哪个运算先被计算,哪个后被计算。例如以下表达式:

我们可以怀疑它实际上表示:

( ) 结果为,还是 ( ) 结果为?

正确答案为第一个,结果为。每一个运算符有一个固定的优先级,不仅对数学运算符(我们可能在学习数学的时候已经很了解它们的优先顺序了),所有在中出现的运算符都有优先级。从最从最高级到最低级,运算的优先级按下表排列:TIrRG。TIrRG。

结合方向定义了当有同优先级的多个运算符在一起时,哪一个必须被首先运算,最右边的还是最左边的。

所有这些运算符的优先级顺序可以通过使用括号 (和)来控制,而且更易读懂,例如以下例子:

;

根据我们想要实现的计算的不同,可以写成:

( ); 或者 ( ) ;

所以如果你想写一个复杂的表达式而不敢肯定各个运算的执行顺序,那么就加上括号。这样还可以使代码更易读懂。7EqZc。7EqZc。

1.4操作符(运算符)

相关推荐