C的位处理包括6类:
& 按位与
|按位或
~ 非
^ 异或
<< 左移
>> 右移
& 按位与:相应位数含0,则该位置0
00101110 & 01100101 结果00100100
| 按位或:相应位数含1,则该位置1
00101110 | 01100101 结果01101111
~ 非:若位数为1,则置为0;若为0,则置1
~00101110 结果11010001
^ 异或:不同位置1,相同位置0
00101110 | 01100101 结果01001011
<< 左移:缺少位数补0
00101110 << 1 结果01011100
>> 右移:
//符号位为0,则右移补0 00101110 >> 1 结果00010111 // 符号位为1,则右移补1 10101110 >> 1 结果11010111
完整示例:
#include <stdio.h> int main(int argc, char* args[]){ int a = 0x2e; int b = 0x65; int c = a & b; printf("%0x\n", c); printf("%0x\n", a | b); int d = b^a; printf("%0x\n", d); printf("%0x\n", ~a); printf("%0x\n", (~a) >> 1); printf("%0x\n", a<<1); printf("%0x\n", a>>1); printf("%0x\n", a>>1); int e = -3; printf("%0x\n", e); printf("%0x\n", e >> 2); printf("%0x\n", e << 2); return 0; }
结果:
24
6f
4b
ffffffd1
ffffffe8
5c
17
17
fffffffd
ffffffff
fffffff4