已知C 语言中的按位异或运算(“XOR”)用符号“^”表示。对于任意一个位序列a,a^a=0,C 语言程序可以?

c语言中^是什么意思~

定义
  异或(xor)是一个数学运算符。它应用于逻辑运算。异或符号为“^”。 其运算法则为a异或b=a'b或ab'(a'为非a)。
  真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。
  异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0,这些法则与加法是相同的,只是不带进位。

异或运算法则
  1. a ^ b = b ^ a
  2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
  3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
  4. a ^ b ^ a = b.
  x是二进制数0101
  y是二进制数1011
  则结果为x^y=1110
  0^0=0
  0^1=1
  1^0=1
  1^1=0
  只有在两个比较的位不同时其结果是1,否则结果为0
  即“相同为0,不同为1”!

作用
  在计算机中普遍运用,异或(xor)的逻辑符号 ^ (Shift + 6)或一个圆圈里面增加一个+(⊕)或者·.形象表示为:
  真^假=真
  假^真=真
  假^假=假
  真^真=假
  或者为:
  True ^ False = True
  False ^ True = True
  False ^ False = False
  True ^ True = False
  部分计算机语言用1表示真,用0表示假,所以两个字节按位异或如下
  00000000
  异或
  00000000
  =
  00000000
  ============我是分界线============
  11111111
  异或
  00000000
  =
  11111111

XOR是位运算符,即*x=a 且*y=b,设定a = 1;b = 2;

*y=*x ^ *y; /* 第一步 */  执行后  *x = 1,*y=3

*x=*x ^ *y; /* 第二步 */ 执行后  *x = 2,*y=3

*y=*x ^ *y; /* 第三步 */执行后  *x = 2,*y=1 

测试例子


int main(int argc,char *argv[])
{
int a = 1;
int b = 2;
int c = 0x55;
int d = 0xaa;
printf("a = %d b=%d
",a,b);
xor_swap(&a,&b);
printf("a = %d b=%d
",a,b);

 printf("c = %d d=%d
",c,d);
xor_swap(&c,&d);
printf("c = %d d=%d
",c,d);
return 0;   
}

运算结果:



各个语句执行以后的值:
1 void xor_swap(int *x, int *y)
2 {
3 *y=*x ^ *y; /* 第一步 */ *y=a^b
4 *x=*x ^ *y; /* 第二步 */ *x=a^(a^b)=(a^a)^b=0^b=b
5 *y=*x ^ *y; /* 第三步 */ *y=b^(a^b)=a^(b^b)=a^0=a
6 }

相关兴趣推荐

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网