位运算符 & 位与运算 运算规则:位与运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算。例如:int型常量4和 7进行位与运算的运算过程以下: 4 = 0000 0000 0000 0100 & 7 = 0000 0000 0000 0111 = 0000 0000 0000 0100 对于负数,按其补码进行运算。例如:例如:int型常量-4和7进行位与运算的运算过程以下: -4=1111 1111 1111 1100 & 7 = 0000 0000 0000 0111 = 0000 0000 0000 0100 | 位或运算 运算规则:位或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑或运算。例如:int型常量5和 7进行位或运算的表达式为5|7,结果以下: ?5= 0000 0000 0000 0101 | 7= 0000 0000 0000 0111 =?0000 0000 0000 0111 ^ 位异或 运算规则:位异或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑异或运算。只有当对应位的二进 制数互斥的时候,对应位的结果才为真。 例如:int型常量5和7进行位异或运算的表达式为5^7,结果以下: 5= 0000 0000 0000 0101 ^ 7= 0000 0000 0000 0111 = 0000 0000 0000 0010 典型应用: 数值交换 数值交换。例如a=10,b=15。在例1中,无须引入第三个变量,利用位运算便可实现数据交换。 例1 编程实现两个数据的交换。 $a=10;//1010 $b=15;//1111 printf("\na=%d,b=%d",$a,$b); $a=$a^$b;//1010 ^ 1111;$a = 0101 printf("\n%%a = '%b'",$a); $b=$a^$b;//0101 ^ 1111;$b = 1010; printf("\n%%b = '%b'",$b); $a=$a^$b;//0101 ^ 1010;$a = 1111; printf("\na=%d,b=%d",$a,$b); a=10,b=15 %a = '0101' %b = '1010' a=15,b=10 ~ 位非 运算规则:位非运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑非运算。例如:对int型常量7 进行位非运算的表达式为~7,结果为2,计算过程以下: ~?7=0000 0000 0000 0111 =?0000 0000 0000 0010