◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
C语言算术运算符和算术表达式
一、C语言算数运算符的分类
C语言的算术运算符共有7个,对应9种运算。按运算对象来分,有两个运算对象成为双目运算符;只有一个运算对象,称为单目运算符。
双目运算符有:+(加) -(减) *(乘) /(除) %(求余数,运算对象必须为整型),共对应5种运算。如:a+b;a-b;a*b;a/b;等都有a和b两个运算对象。
单目运算符有:++(自增1,运算对象必须为变量) --(自减1,运算对象必须为变量) +(取正) -(取负),共对应4种运算。如:a++;a--;等只有a一个运算对象。
如何理解++,--前缀形式和后缀形式的运算符?
++,--在变量左边叫前缀形式,表示先使变量的值加1或减1,然后再使用变量的值;++,--在变量右边叫后缀形式,表示先使用变量的值,然后再使变量的值加1减1。
例如:设int x=5;
y=++x; 表示先计算x=x+1,再计算y=x,结果y=6,x=6。
y=x++; 表示先计算y=x,再计算x=x+1,结果y=5,x=6。
二、C语言算术运算符的运算优先级和结合性
优先级:指同一个表达式中不同运算符进行计算时的先后顺序。
结合性:指相同优先级的多个运算符的求值顺序。
算术运算符的运算优先级:
- ()
- ++、--、-(取负)
- *、/、%
- +、-
1最高,4最低。
算术运算符的运算结合性:
- () 自内向外
- ++、--、-(取负) 自左向右,注意此时++,--是作为前缀形式。
- *、/、% 自左向右
- +、- 自左向右
三、C语言的算术表达式
C语言算术表达式只能由运算符、圆括号、系统库函数和运算对象组成。
如:(a+b+c)/sqrt(a)+b*(sin(x)+sin(y))
四、算术型数据混合运算的类型转换
自动类型转换
自动类型转换也称为隐式类型转换。C语言约定自动转换规则是有低级向高级转换,如果一个运算符带有两个不同类型的操作数,那么在操作之前先将较低的类型转换为较高的类型,然后进行运算,运算结果取较高的类型。

数据类型自动转换规则示意图
水平箭头表示必定转换,纵向箭头表示两个不同类型对象时的转换方向。
强制类型转换
强制类型转换又称为显示类型转换,是根据程序的需要,将某数据强制转换成指定的数据类型。强制类型转换形式如下:
(类型标识符)表达式
例如:(int)(2.7+6.8),这表示将2.7+6.8的运算结果9.5强制转换成int类型整数9,舍弃小数部分。而(float)x/y则表示将x强制转换成float型后,再与y进行除法计算。
需要注意的是,强制转换得到的结果只是一个临时的,变量或表达式原来的类型并没有发生任何变化。
最后举几个例子进一步巩固前面的知识。
例如:设float x,y;
x=6/4;
y=6./4;
结果是x的值为1.0,y的值为1.5。因为两个整数直接相除,结果自动取整,丢弃小数部分。
例如:设int x=5;
y=x++*x++; 先做x*x的运算,使y=25,再进行连续两次x++,使x=7。(因为后缀是先使用变量值,然后自加。)
y=++x*++x; 先进性两次x++运算,使x=7,再做x*x运算,使y=49。(因为前缀是先自加,后使用变量值)
y=x++*++x; 先做最右边的++x运算,是x为6,再做x*x的运算,使y=36,最后做x++运算,使x=7。(这里可以总结成优先级:前缀运算符>双目运算符>后缀运算符)
原创文章如转载,请注明:转载自微风博客 [ http://www.vichx.com/ ]
本文链接地址:http://www.vichx.com/post/c-2-4-1.html
- 1.
 yacca
- http://www.eemir3.com
- 丫的 都还给老师了...
- 2008-11-7 22:19:14 [Report Spam] 回复该留言


