C语言 异或运算符 ^
C语言中异或运算符^表示参见运算的二进制运算符相同为0,不同为1,如下:
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
下面举例说明∧运算符的应用:
(1)使特定位翻转
假设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行∧运算,即结果值的低4位正好是原数低4位的翻转。要使哪几位翻转就将与其∧运算的该几位置为1即可。这是因为原数中值为1的位与1进行∧运算得0,原数中的位值0与1进行∧运算的结果得1。
(2)与0相∧,保留原值
如012∧00=012,因为原数中的1与0进行∧运算得1,0∧0得0,故保留原数。
(3)交换两个值,不用临时变量
假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:
a = a ∧ b;
b = b ∧ a;
a = a ∧ b;
即等效于以下两步:
① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。而b∧a∧b等于a∧b∧b。b∧b的结果为0,因为同一个数与本身相∧,结果必为0。因此b的值等于a∧0,即a,其值为3。
② 再执行第三个赋值语句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。
a得到b原来的值。
以上来自:http://blog.sina.com.cn/s/blog_74a459380101d6xl.html
例子:
#include <stdio.h> #include <stdlib.h> void swap_int(int *a, int *b); int main() { int a = 10; int b = 20; printf("a = %d b = %d ", a, b); swap_int(&a, &b); printf("a = %d b = %d ", a, b); system("pause"); return 0; } void swap_int(int *a, int *b) { *a ^= *b; *b ^= *a; *a ^= *b; }