一、算术操作符。
首先了解一下算术标识符都有哪些:+、-、*、/、%。
即最常用的加,减,乘,除,模的用法,它们之间的优先级类似于数学,乘除模的优先级高于加减,这里举个栗子:
20 - 10 + 15 / 5 * 20 % 3
先乘除所以, 15 / 5 = 3, 3 * 20 = 60, 60 % 3 = 0, 然后 20 - 10 = 10, 10+0 = 10;
二、移位操作符。
移位操作符有两种:>>(右移操作符)、<<(左移操作符)。
(左移操作符<<):用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。
(右移操作符<<):将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0。
特别注意右移操作时分为两种情况:
1、算术右移
算术右移情况指的是:二进制数有正负之分,左边位补原数的符号位;
2、逻辑移位。
逻辑移位情况指的是:不需要考虑符号产生的问题,直接补0即可。
注意:
1、移位操作符不能直接赋值改变变量。
如果需要改变变量需要这样输入:a>>=1;
2、左移操作相当于*2;
右移操作相当于/2。
3、算术运算符 优先于 位移位运算符 优先于 关系运算符
三、位操作符。
位操作符包括:&(按位与)、|(按位或)、^(按位异或)、~(取反)。
[&] :按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
[|] :按位或运算符“|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
[^] :按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。
[~] 求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。
四、赋值操作符。
赋值操作符在之前的程序代码中经常出现,其操作符有: += 加赋值 -= 减赋值 *= 乘赋值 /= 除赋值 %= 求余赋值 &= 按位与赋值 | = 按位或赋值 ^= 按位异或赋值 <<= 左移位赋值 >>= 右移位赋值
注意在连续赋值时,应从右往左赋值,例如:
a=x=y+1;
输出时a的值就应是y+1。
五、单目操作符。
单目操作符有:!(逻辑反操作、非)、&(取地址符)、sizeof(求长度)、~(按位取反)、++、–、*、(类型)等。
需要注意的是:
1、&是取地址符,%p打印地址。
2、sizeof()是操作符,不是函数!
3、++的前置和后置。
六、关系操作符。 > >= < <= != 用于测试“不相等” == 用于测试“相等”
七、逻辑操作符
与运算(&&) 参与运算的两个表达式都为真时,结果才为真,否则为假。或运算(||) 参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。八、条件操作符(C语言中唯一 一个三目运算符) exp1 ? exp2 : exp3
exp1 为真 结果为exp2 为假 结果为exp2。
#include<stdio.h> int main() { int a=10, b=0; if (a > 5) b = 3; else b = -3; printf("b=%d\n", b); system("pause"); return 0; }九、逗号表达式 exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。 如:(3+5,6+8)的值是14;a=(a=35,a4)的值是60,其中(a=35,a4)的值是60, a的值在逗号表达式里一直是15,最后被逗号表达式赋值为60,a的值最终为60。
基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7. 逻辑运算最后结合。