运 算 符
(1) 算术运算符(+, -, *, /, %, ++, --)。
(2) 关系运算符(, <=, >=, ==, ![KG-*8]=)。
(3) 逻辑运算符(!, &&, ||)。
(4) 位运算符(<>, ~, |, ^, &)。
(5) 赋值运算符(=, 及其双目运算符的扩展赋值运算符)。
(6) 条件运算符(? :)。
(7) 逗号运算符(,)。
(8) 指针运算符(*, &)。
(9) 求字节数运算符(sizeof)。
(10) 强制类型转换运算符((类型))。
(11) 分量运算符(·, ->)。
(12) 下标运算符([ ])。
(13) 圆括号运算符(( ))。
算术运算符和赋值运算符
说明:
(1) +, -, *, / 与数学中运算类似, 先乘除后加减, 也就是按优先级顺序进行运算,优先级小的先运算。要改变运算顺序只要加括号就可以了,括号全部为圆括号,必须注意括号的配对,它们适用于C的几乎全部数据类型(指针类除外)的各种运算(++, --除外)。除法运算符(/)在用于两个整型数据运算时,其运算结果也是整数,余数总是被截掉。如1/2的结果是0;10/3的结果是3。
(2) 求余运算符(%)仅用于整型数据,不能用于实型和双精度实型。它的作用是取整数除法的余数。如1%2的结果是1; 10%3的结果也是1。
(3) 赋值运算符(=)是将右边表达式的值赋给左边的变量。 赋值运算符左边必须是变量等有存贮单元的元素,而不能是常量或表达式。如x=x+1是合法的,即把x的值加上1后再赋给x,而x+1=x却是非法的,因为x+1不是一个存贮单元, 不能被赋以值。赋值号有别于数学中的等号,这一点是要注意的。
(4) ++, --仅用于整型变量,指针变量。用于整型变量在原值上加1或减1;用于指针变量是取下一地址或上一地址。 关于指针部分的使用在第八章中介绍。 增1和减1运算符用在表达式中时,写法是有差别的:如果运算符在操作数前面, 则在表达式“引用”该操作数前,先对其作加1或减1运算; 如果运算符在操作数之后,则先“引用”该操作数,然后再对它作加1或减1运算。考虑以下程序:
main( )
{ int x, y;
x=10;
y=++x;
printf(″%d, %d\n″, x, y);
}
运算结果为
11, 11
此时y的值和x的值都为11。 然而换一种写法:
main( )
{ int x, y;
x=10;
y=x++;
printf(″%d, %d\n″, x, y);
}
运行结果为
11, 10
此时y的值是10,而x的值自增后为11。上述两种情况x都变成了11,而y的值却不同。它们的差别只在于给x加1的时机不同。 此时赋值即为引用。 再如进行输出操作时,有以下程序段:
x=10;
printf(″x=%d\n″, ++x);
运行结果为x=11,执行其下一条语句时x也是11, 而程序段:
x=10;
printf(″x=%d\n″, x++);
(5) +, -, *, /, % 可以与赋值号=组成复合赋值运算符+=, -=, *=, /=, %=。
如a=a+b可以写成a+=b,a=a*b可以写成a*=b。其余类推。 这样书写简练,运行速度快,也提高了编译效率。