运算符
运算符分类:
-
算数运算符:*, - ,+ ,/ ,%
-
关系运算符:> ,< ,==, != ,>= ,<=
-
逻辑运算符:!, && ,||
-
位运算符:<<,>>,~,|.^,&
-
赋值运算符:=级扩展运算符
-
条件运算符:?
-
逗号运算符:,
-
指针运算符:*,&
-
求字节数运算符:sizeof
-
强制类型转化运算符:(类型)
-
分量运算符(成员指示符):.,->
-
下标运算符:[]
优先级:
第一级:() [] -> . 右结合性
第二级:【!】 【~】 【++ --】 【-】(负号运算符 ) ,类型转化【()】,指针和取地址【* &】长度【sizeof】单目运算符 右结合性
第三级:* / %
第四级:+ -
第五级:<< >>
第六级:关系运算符【< > <= >=】
第七级:等于【==】不等于【!=】
第八级:按位与【&】
第九级:按位异或【^】
第十级:按位或 【|】
第十一级:逻辑与 &&
第十二级:逻辑或 ||
第十三级:条件运算符 ? 三目运算 右结合性
第十四级:赋值运算符【= += -= /= %= >>= <<= &= |= ^=】 右结合性
第十五级:逗号运算符 ,
条件运算符表达式:
b? x:y
先计算条件b,b为yure,则结果为x的值,否则为y的值。
位运算符:
& 按位与
|按位或
^按位异或
~取反
<<左移
>>右移
运算方法:
& 参与运算的两数的各对应二进制数相与,对应二进制位均为1才为1,否则为0
| 参与运算的两数的各对应二进制数相或,对应二进制位有1就为1,全为0才为0
^ 参与运算的两数的各对应二进制数相 异或,对应二进制位相异为1
~ 取反,单目运算符,对参与运算的数的各二进制位 按位取反
<< 左移n位就是乘以2的n次方,功能把左边的运算数的各二进位全部左移若干位,由右边的数指定移动的位数,高位丢弃,低位补0。例如 a<<4,将a各位左移4位。
>> 右移 右移n位就是除以2的n次方 对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
位运算符应用
判断int型变量a是奇数还是偶数 a&1 = 0 偶数 a&1 = 1 奇数
取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1
将int型变量a的第k位清0,即a=a&~(1<
将int型变量a的第k位置1, 即a=a|(1<
int型变量循环左移k次,即a=a<>16-k (设sizeof(int)=16)
int型变量a循环右移k次,即a=a>>k|a<<16-k (设sizeof(int)=16)