位運算符 & 位與運算 運算規則:位與運算的實質是將參與運算的兩個數據,按對應的二進制數逐位進行邏輯與運算。例如: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