类别 | 名称 | 符号 | 对象数目 | 运算规则 | 运算对象 | 运算结果 | 优先级别 | 结合性 |
强制运算符 | 圆括号 | () | 单目 | 参数表 | 任何类型 | 任何类型 | 15 | 自左向右 |
下标运算符 | 方括号 | [] | 单目 | 数组下标 | 任何类型 | 任何类型 | 15 | 自左向右 |
成员运算符 | 圆点 | · | 单目 | 结构成员符 | 任何类型 | 任何类型 | 15 | 自左向右 |
成员运算符 | 左箭头 | <- | 单目 | 共用成员符 | 任何类型 | 任何类型 | 15 | 自左向右 |
算术运算符 | 正 | + | 单目 | 取原值 | 整型或实型 | 整型或实型 | 14 | 自右向左 |
算术运算符 | 负 | - | 单目 | 取负值 | 整型或实型 | 整型或实型 | 14 | 自右向左 |
算术运算符 | 加 | + | 双目 | 相加取和 | 整型或实型 | 整型或实型 | 12 | 自左向右 |
算术运算符 | 减 | - | 双目 | 相减取差 | 整型或实型 | 整型或实型 | 12 | 自左向右 |
算术运算符 | 乘 | * | 双目 | 相乘取积 | 整型或实型 | 整型或实型 | 13 | 自左向右 |
算术运算符 | 除 | / | 双目 | 相除取整商 | 整型或实型 | 整型或实型 | 13 | 自左向右 |
算术运算符 | 模 | % | 双目 | 整除取余 | 整型 | 整型 | 13 | 自左向右 |
算术运算符 | 增1(前缀) | ++ | 单目 | 先加1 | 整字指变数 | 同左 | 14 | 自右向左 |
算术运算符 | 增1(后缀) | ++ | 单目 | 后加1 | 整字指变数 | 同左 | 14 | 自右向左 |
算术运算符 | 减1(前缀) | -- | 单目 | 先减1 | 整字指变数 | 同左 | 14 | 自右向左 |
算术运算符 | 减1(后缀) | -- | 单目 | 后减1 | 整字指变数 | 同左 | 14 | 自右向左 |
关系运算符 | 小于 | < | 双目 | 真为1假为0 | 整实和字符 | 整型逻辑值 | 10 | 自左向右 |
关系运算符 | 小于或等于 | <= | 双目 | 真为1假为0 | 整实和字符 | 整型逻辑值 | 10 | 自左向右 |
关系运算符 | 大于 | > | 双目 | 真为1假为0 | 整实和字符 | 整型逻辑值 | 10 | 自左向右 |
关系运算符 | 大于或等于 | >= | 双目 | 真为1假为0 | 整实和字符 | 整型逻辑值 | 10 | 自左向右 |
关系运算符 | 等于 | = | 双目 | 真为1假为0 | 整实和字符 | 整型逻辑值 | 9 | 自左向右 |
关系运算符 | 不等于 | != | 双目 | 真为1假为0 | 整实和字符 | 整型逻辑值 | 9 | 自左向右 |
逻辑运算符 | 逻辑非 | ! | 单目 | 逻辑值取反 | 数值或字符 | 整型逻辑值 | 14 | 自右向左 |
逻辑运算符 | 逻辑与 | && | 双目 | 有假为假 | 数值或字符 | 整型逻辑值 | 5 | 自左向右 |
逻辑运算符 | 逻辑或 | || | 双目 | 有真为真 | 数值或字符 | 整型逻辑值 | 4 | 自左向右 |
赋值运算符 | 赋值 | = | 双目 | 等于 | 任何类型 | 表达式 | 2 | 自右向左 |
反赋值运算 | 加赋值 | += | 双目 | 和入第一数 | 数值型 | 数值型 | 2 | 自右向左 |
反赋值运算 | 减赋值 | -= | 双目 | 差入第一数 | 数值型 | 数值型 | 2 | 自右向左 |
反赋值运算 | 乘赋值 | *= | 双目 | 积入第一数 | 数值型 | 数值型 | 2 | 自右向左 |
反赋值运算 | 除赋值 | /= | 双目 | 商入第一数 | 数值型 | 数值型 | 2 | 自右向左 |
反赋值运算 | 模赋值 | %= | 双目 | 余入第一数 | 整型 | 整型 | 2 | 自右向左 |
逗号运算符 | 逗号 | , | 双目 | 分隔表达式 | 表达式 | 表达式类型 | 1 | 自左向右 |
条件运算符 | 条件 | ?: | 三目 | 条件判断 | 表达式 | 表达式类型 | 3 | 自右向左 |
长度运算符 | 长度 | sizeof | 单目 | 测试长度 | 说明符/变量 | 整型 | 14 | 无 |
位运算符 | 位非 | ~ | 单目 | 逻辑位取反 | 整型 | 整型 | 14 | 自右向左 |
位运算符 | 位与 | & | 双目 | 有假为假 | 整型 | 整型 | 8 | 自左向右 |
位运算符 | 位或 | | | 双目 | 有真为真 | 整型 | 整型 | 6 | 自左向右 |
位运算符 | 按位加 | ^ | 双目 | 同假异真 | 整型 | 整型 | 7 | 自左向右 |
位移位运算 | 左移 | << | 双目 | 向左移位 | 整型 | 整型 | 11 | 自左向右 |
位移位运算 | 右移 | >> | 双目 | 向右移位 | 整型 | 整型 | 11 | 自左向右 |
位自反赋值 | 位与赋值 | &= | 双目 | 同反赋值 | 整型 | 整型 | 2 | 自右向左 |
位自反赋值 | 位或赋值 | |= | 双目 | 同反赋值 | 整型 | 整型 | 2 | 自右向左 |
位自反赋值 | 按位加赋值 | ^= | 双目 | 同反赋值 | 整型 | 整型 | 2 | 自右向左 |
位自反赋值 | 位左移赋值 | <<= | 双目 | 同反赋值 | 整型 | 整型 | 2 | 自右向左 |
位自反赋值 | 位右移赋值 | >>= | 双目 | 同反赋值 | 整型 | 整型 | 2 | 自右向左 |
原文链接:http://i.cn.yahoo.com/gwutf/blog/p_26/
===============================================================================
C语言位运算符的使用
一、按位与运算符&
参与运算的两个量按照对应的位进行与运算,且
0&0→0, 0&1→0, 1&0→0, 1&1→1
利用按位与运算,我们可以方便地实现清零或取一个数的某些位。
例如 取出a的低4位,将b的低4位清零。
0x0F&a 取出a的低4位
0xF0&b 将b的低4位清零
这种方法称为“屏蔽方法”,其中0x0F、0xF0称为屏蔽字。
二、按位或运算符|
参与运算的两个量按照对应位进行或运算,且
0|0→0, 0|1→1, 1|0→1, 1|1→1
利用按位或运算,我们可以方便地实现置位或组合新值。
例如 将整数i(2字节)的低字节全置为1。
0xff|i
例如 将整数a的低字节和整数b的高字节组成一个新值。
先取出a的低字节:0xff&a (或0x00ff&a)
再取出b的高字节:0xff00&b
然后组成新值: 0xff&a|0xff00&b
三、按位异或运算符^
参与运算的两个量按照对应的位进行异或运算,且
0^0→0, 0^1→1, 1^0→1, 1^1→0
此外,一个数与0异或仍保持不变,即a^0=a
一个数与自己异或结果为0,即a^a=0
四、按位取反运算符~
这是位运算符中唯一的单目运算符,即将数的每一位取反(0→1,1→0)。
例如 将整数a的最低位清零
0xfffe&a
对于有的大中型计算机,整型占4个字节,如将上式直接挪用过去,则将丢失a的两个高字节,必须改为
0xfffffffe&a
因此程序通用性降低。若改为下面形式则通用:
~1&a
五、左移运算符<<
将一个数的各二进制位全部左移若干位。左移后右边补入0,左边移出的位舍弃。
例如 若a=3,则b=a<<1,b为6
c=b<<1,c为12
即左移一位相当于乘以2。用这种方式实现乘法运算比其它方式快得多,但只适用于左边没有1被移出的情况。例如
a=0x83,则a<<1 结果为6
六、右移运算符>>
将一个数的各二进制位全部右移若干位。右移后,右边移出的位被舍弃,左边补入的位分两种情况:
(1) 对无符号数,左边补入0
(2) 对有符号数,若符号位为0(正数)则补入0;若符号位为1(负数)则补入1。