4.1 算术运算符
运算符/和%需要特别注意:
- 运算符/可能产生意外的结果.当两个操作数都是整数时,运算符/通过丢掉分数部分的方法截取结果.因此1/2的结果是0而不是0.5
- 运算符%要求整数操作数;如果两个操作数中有一个不是整数,那么程序将无法编译通过
- 当运算符/和运算符%用于负的的操作数时,其结果与具体实现有关.(-9/7可能为-1也可能为-2)
4.1.1 运算符的优先级和结合性
运算符 |
结合性 |
() [] -> .
|
从左向右
|
! ~ ++ -- + - * & (type) sizeof
|
从右向左
|
* / %
|
从左向右
|
+ -
|
从左向右
|
<< >>
|
从左向右
|
< <= > >=
|
从左向右
|
== !=
|
从左向右
|
&
|
从左向右
|
^
|
从左向右
|
|
|
从左向右
|
&&
|
从左向右
|
||
|
从左向右
|
? :
|
从右向左
|
= += -= *= /= %= &= ^= |= <<= >>= |
从右向左
|
,
|
从左向右
|
注:一元运算符= - & *比相应的二元运算符+ -& *的优先级高
注意:位运算符& ^ |的优先级比==和!=低,这意味着为测试表达式必须用圆括号括起来才能得到正确结果
if ((x & MASK) == 0)....
4.2 赋值运算符
4.2.1 副作用
通常不希望运算符修改他们的操作数,如表达式i+j不会改变i和j的值.但是有一些也会改变,由于这类运算符所做的不仅仅是计算出值,所以称他们有副作用(side effect).简单的赋值运算符改变了运算符左边的操作数,表达式i=0产生的结果为0,作为副作用把0赋值给i.
4.2.2 左值
赋值运算符要求它左边的操作数必须是左值(L-value).左值表示存储在计算机内存中的对象,而不是变量或计算结果.变量是左值,而诸如10或2*i这样的表达式则不是左值.
Q&A
1 ++和--是否可以处理float型的变量?
答:可以.规定自增和自减运算可以用于所有数值类型.但是极少采用自增和自减运算符处理float型变量.
2 C语言有左值,那还有右值吗?
答:有.左值是可以出现在赋值运算符左侧的表达式,而右值则是可以出现在赋值右侧的表达式.因此,右值可以是变量 常量 或者更复杂的表达式.
阅读(443) | 评论(0) | 转发(0) |