Mike发个范例4-7,来演示下前面介绍的四种各种位运算符:按位与,按位或,按位异或,一次求反。
01 // Bitwise operators illustrated
02
03 #import <Foundation/Foundation.h>
04
05 int main (int argc, const char * argv[])
06 {
07 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
08
09 unsigned int w1 = 0xA0A0A0A0, w2 = 0xFFFF0000, w3 = 0x00007777;
10
11 NSLog(@"%x %x %x", w1 & w2, w1 | w2, w1 ^ w2);
12 NSLog(@"%x %x %x", ~w1, ~w2, ~w3);
13 NSLog(@"%x %x %x", w1 ^ w1, w1 & ~w2, w1 | w2 | w3);
14 NSLog(@"%x %x", w1 | w1 & w3, w1 | w2 & ~w3);
15 NSLog(@"%x %x", ~(~w1 & ~w2), ~(~w1 | ~w2));
16
17 [pool drain];
18 return 0;
19 }
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
最终输出结果:
a0a00000 ffffa0a0 5f5fa0a0
5f5f5f5f ffff ffff8888
0 a0a0 fffff7f7
a0a0a0a0 ffffa0a0
ffffa0a0 a0a00000
前三个NSLog乏善可陈,第四个要注意的是按位与运算符的优先级要高于按位或,因为会影响结果。第五个则展示了 ~(~a & ~b) 等于 a | b,~(~a | ~b)等于 a & b。