C语言中的运算符
-
C
语言中的运算符
简单赋值运算符记为
“=”
,由
“= ”
连接的式子称为赋值表达
式。欢迎大家阅读!更多相关信息请关注相关栏目!
无论是加减乘除还是大于小于,都需要用到运算符,在
C
语言中的运算符和我们平时用的基本上都差不多。
< br>运算符包括赋
值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算
p>
符、关系运算符、自增自减运算符。大多数运算符都是二目运算
符,
即运算符位于两个表达式之间。
单目运算符的意思是运算符
p>
作用于单个表达式。
(
具体什么是表达式下
一节再说
)
C
语言中的运算符
p>
无论是加减乘除还是大于小于,都需要用到运算符,在
C
语言中的运算符和我们平时用的基本上都差不多。
运算符包括赋
值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算
符、关系运
算符、自增自减运算符。大多数运算符都是二目运算
符,
即运算
符位于两个表达式之间。
单目运算符的意思是运算符
作用于单个
表达式。
(
具体什么是表达式下一节再说
)
一、赋值运算符
赋值语
句的作用是把某个常量或变量或表达式的值赋值给
另一个变量。符号为‘
=
’
。这里并不是等于的意思,只是赋值,
等于用‘
==
‘表示。
注意:赋值语句左边的变量在程序的其他地方必须要声明。
得已赋值的变量我们称为左值,<
/p>
因为它们出现在赋值语句的
左边;
产生值
的表达式我们称为右值,
因为她它们出现在赋值语
句的右边。常
数只能作为右值。
例如:
count=5;
total1=total2=0;
第一个赋值语句大家都能理解。
第二个
赋值语句的意思是把
0
同时赋值给两个变量。
< br>这是因
为赋值语句是从右向左运算的,
也就是说从右端开
始计算。
这样
它先
total2=0;
然后
total1=total2;
那
么我们这样行不行呢?
(total1=total2)=0;
这样是
不可以的,
因为先要算括号里面的,
这时
total1=total2
是一个表达式,而赋值语句的左边是不允许表达式存在的
。
二、算术运算符
p>
在
C
语言中有两个单目和五个双目运算符。
符号
功能
单目正
单目负
乘法
除法
取模
加法
减法
下面是一些赋值语句的例子,
在赋值运算符右侧的表达式中就使用了上面的算术运算符:
Area=Height*Width;
num=num1+num2/num3-num4;
运算符
也有个运算顺序问题,
先算乘除再算加减。
单目正和
单目负最先运算。
取模运算符
(%)
用于计算两个整数相除所得的余数。例如:
a=7%4;
最终
a<
/p>
的结果是
3
,因为
7%4
的余数是
3
。
那么有人要问了,我要想求它们的商怎么办呢?
b=7/4;
这样
b<
/p>
就是它们的商了,应该是
1
。
也许有人就不明白了,
7/4
应该是
1.75
,怎么会是
< br>1
呢?这
里需要说明的是,
当两
个整数相除时,
所得到的结果仍然是整数,
没有小数部分。要想
也得到小数部分,可以这样写
7.0/4
或者
< br>7/4.0
,也即把其中一个数变为非整数。
p>
怎样由一个实数得到它的整数部分呢?这就需要用强制类
型转换了。
例如:
a=(int)
(7.0/4);
p>
因为
7.0/4
的值为
1.75
,如果在前面加上
(int)
就表示把结果
强制转换成整型,这就得到了
1
。那么思考一下
a=(float)
(7/
4);
最终
a
的结果是多少?
单目减运算符相当于取相反值,
若是
正值就变为负值,
若是
负数就变为正值。
单目加运算符没有意义,纯粹是和单目减构成一对用的。
三、逻辑运算符
逻辑运
算符是根据表达式的值来返回真值或是假值。
其实在
C
语言中没有所谓的真值和假值,只是认为非
0
为
真值,
0
为假
值。
符号
功能
逻辑与
逻辑或
逻辑非
例如:
5!3;
0||-25;
!4;
当表达
式进行运算时,
只要有一个为假,
总的表达式就为假,
只有当所有都为真时,总的式子才为真。当表达式进行
||
运算时,
只要有一个为
真,总的值就为真,只有当所有的都为假时,总的
式子才为假。
逻辑非
(!)
运算是把相应的变量数据转换为相应的真
/
假值。若原先为假,则逻辑非以后为真,若原先为真,则逻辑
非以后为假。
还有一点很重要,
当一个逻辑表达式的后一部分的取值不会
影响整个表达式的值时,后一部分就不
会进行运算了。例如:
a=2,b=1;
a||b-1;
因为
a=
2
,为真值,所以不管
b-1
是不是真
值,总的表达式
一定为真值,这时后面的表达式就不会再计算了。
四、关系运算符
关系运
算符是对两个表达式进行比较,返回一个真
/
假值。
符号
功能
大于
小于
=
大于等于
=
小于等于
等于
不等于
p>
这些运算符大家都能明白,主要问题就是等于
==
< br>和赋值
=
的
区别了。
一些刚开始学习
C
< br>语言的人总是对这两个运算符弄不明白,
经常在一些简单问题上出错,
自己检查时还找不出来。
看下面的
代码:
if(Amount=123)
很多新
人都理解为如果
Amount
等于
12
3
,就怎么样。其实
这行代码的意思是先赋值
< br>Amount=123
,然后判断这个表达式是
不是真值
,因为结果为
123
,是真值,那么就做后面的。如果想
让当
Amount
等于
123
才运行时,应该
if(Amount==123)
……
五、自增自减运算符
这是一
类特殊的运算符,自增运算符
++
和自减运算符
--
对变
量的操作结果是增加
1
和减少
1
。例如:
< br>
--Couter;
Couter--;
++Amount;
Amount++;
看这些例子里,
< br>运算符在前面还是在后面对本身的影响都是
一样的,都是加
1
或者减
1
,但是当把他们作为其他
表达式的一
部分,
两者就有区别了。
运算符放在变量前面,
那么在运算之
前,
变量先完成自增或自减运算;
如果运算符放在后面,
那么自增自
减运算是在变量参加表达式的运算后再运算。
这样讲可能不太清
楚,看下面的例子:
num1=4;
num2=8;
a=++num1;
b=num2++;
p>
a=++num1;
这总的来看是一个赋值,把
++num1
的值赋给
a
,
因为自增运算符在变量的前面,所以
num1
先自增加
1
变为
5
,
然后赋值给
a
,最终
a
也为
5
。
b=num2++;
这是把
num2++
的值赋
给
b
,因为自增运
算符在变量的后面,所以先把
num2
赋值给
< br>b
,
b
应该为
< br>8
,然后
num2
自增加
1
变为
9
。
那么如果出现这样的情况我们怎么处理呢?
c=num1+++num2;
到底是
c
=(num1++)+num2;
还是
c=num1+(++n
um2);
这要根据
编译器来决定,
不
同的编译器可能有不同的结果。
所以我们在以
后的编程当中,应
该尽量避免出现上面复杂的情况。
六、复合赋值运算符
在赋值
运算符当中,还有一类
C/C++
独有的复合赋值运算
符。它们实际上是一种缩写形式,使得对变量的改变更为简洁。
Total=Total+3;
p>
乍一看这行代码,似乎有问题,这是不可能成立的。其实还
是老样子
,
=
是赋值不是等于。它的意思是本身的值加
< br>3
,然后
在赋值给本身。为了简化,上面的代码也可以写
成:
Total+=3;
复合赋值运算符有下列这些:
符号
功能
加法赋值
减法赋值
乘法赋值
除法赋值
模运算赋值
=
左移赋值
=
右移赋值
=
位逻辑与赋值
位逻辑或赋值
位逻辑异或赋值
上面的
十个复合赋值运算符中,
后面五个我们到以后位运算
时再说明。
那
p>
么看了上
面的复合赋
值运
< br>算符,有人
就会
问,到底
Tot
al=Total+3;
与
Total+=3;
有
没
有
区
别
?
答
案
是
有
的
,
对<
/p>
于
A=A+1
,表达式
< br>A
被计算了两次,对于复合运算符
A+=1
,表达
式
A
仅计算了一次。
一般的来说,这种区别对于程序的运行没
有多大影响,
但是当表
达式作为函数的返回值时,
函数就被调用
了两次
(
以后再说明
)
,而且如果使
用普通的赋值运算符,也会加
大程序的开销,使效率降低。
七、条件运算符
条件运
算符
(?:)
是
C
语言中唯一的一个三目运算符,它是对
第一个表达式作真
/
假检测,然后根据结果返回两外两个表达式
中的一个。
表达式
1?
表达式
2:
表达式
3
p>
在运算中,首先对第一个表达式进行检验,如果为真,则返
回表达式
2
的值;如果为假,则返回表达式
3<
/p>
的值。
例如:
a=(b0)?b:-b;
当
b0<
/p>
时,
a=b
;
当
b
不大于
0
时
,
a=-b
;
这就是条件表达式。
p>
其实上面的意思就是把
b
的绝对值赋值给<
/p>
a
。八、逗号运算符
p>
在
C
语言中,
多个
表达式可以用逗号分开,
其中用逗号分开
的表达式的值分别结算
,
但整个表达式的值是最后一个表达式的
值。
< br>
假设
b=2,c=7,d=5,
a1=(++b,c--,d+3);
a2=++b,c--,d+3;
对于第一行代码,有三个表达式,
用逗号分开,所以最终的
值应该是最后一个表达式的值,也就是
d+3
,为
8
,所以
< br>a=8
。
对于第二行代码,
那么
也是有三个表达式,
这时的三个表达式为
a2=++b
、
c--
、
d+3,(
这是因为赋值运算符比逗号运算符优先级高
)
< br>所以最终表达式的值虽然也为
8
,但
a2=3
。
还有其
他的如位逻辑运算符,
位移运算符等等,
我们等到讲
位运算时再说明。
九、优先级和结合性
从上面
的逗号运算符那个例子可以看出,
这些运算符计算时
都有一定的
顺序,
就好象先要算乘除后算加减一样。
优先级和结
合性是运算符两个重要的特性,
结合性又称为计算顺序,
< br>它决定
组成表达式的各个部分是否参与计算以及什么时候计算。
< br>
下面是
C
语
言中所使用的运算符的优先级和结合性:
优先级
运算符
结合性
(
最高
)
-
自左向右
sizeof
自右向左
自左向右
自左向右
自左向右
=
=
自左向右
自左向右
自左向右
自左向右
自左向右
自左向右
自左向右
自右向左
=