3、按位异或(^)

按位“异或”运算 ^ 具有一些特殊的应用,介绍如下:
① 按位“异或”运算可以使特定的位取反
例如:我们想让a数中的最低位和最高位取反,只要用0x81,即二进制数10000001去与它作按位“异或”运算,其运算结果同上式。经过操作后,最高位的值已经由1变0,而最低位的值也已经由0变1,起到了使这两位翻转的效果。其它位的状态保持不变。 可以看到,这个数除最低位、最高位为1外,其它各位均为0,操作的结果只会将a数中的第0、7位取反,而a数的其它位不受影响。也就是说,若需要某个数的第n位取反,只需要将该数与另一个数按位相“异或”,另一个数除了相应的第n位为1外,其它各位都为0,以起到对其它各位的屏蔽作用。上面的运算可以用a = a ^ (0x81) 来表示,也可以用a ^ =(0x81) 来表达。
② 直接交换两个变量的值
例如,若有变量a = 3,b = 4,想要交换它们的值,可以做如下一组操作: a ^ = b b ^ = a a ^ = b
首先,a ^ = b: a 0000 0011 ^ b 0000 0100 a = 0000 0111
其次,b ^ = a: b 0000 0100 ^ a 0000 0111 b = 0000 0011
最后,a ^ = b: a 0000 0111 ^ b 0000 0011 a = 0000 0100
这样,a、b两个变量中的值就进行了对调。
4、按位取非(~)

5、左移操作(<<)与右移操作(>>)
对于x,x<>n相当于x/(2^n)
6、右移操作详解:
右移操作相当的诡异,当一个变量进行右移操作,C语言需要填充左边空的比特位
然而对于有符号变量,C使用符号位,如下表: