C语言 按位两次异或是什么意思

c语言按位异或什么意思?~

按位异或,其操作符为^,形式为
a^b
计算时,根据操作数a和b每位的值,计算结果,当a,b的对应位上值相同时,结果的该位上值为0,否则值为1。

char a = 0x12, b = 0x34;
a^b
= 0x12 ^ 0x34
= B0001 0010 ^ B0011 0100
= B0010 0110
=0x26

按位异或,其操作符为^,形式为a^b计算时,根据操作数a和b每位的值,计算结果,当a,b的对应位上值相同时,结果的该位上值为0,否则值为1。如char a = 0x12, b = 0x34;a^b= 0x12 ^ 0x34= B0001 0010 ^ B0011 0100= B0010 0110=0x26

扩展资料:
异或,英文为exclusive OR,缩写成xor异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。
参考资料:异或百度百科

按位两次异或是“a^=b;b^=a;”这样吗,如果是的话,那么

对无符号整数而言等价于如下语句:

temp=a; a^=b; b=temp; 

相当于a与b异或了一次,值存在a,而旧的a值又赋给了b

如果是“a^=b;b^=a;a^=b;”

其实就是交换两个变量的值

等价于

temp=a;a=b;b=temp;

意义在于,少用一个变量,节省空间

//PS: 按位计算对于计算机语言而言大同小异,我偷了个懒用了javascript来写



比如输入的两位无符号整数定义为a, b
那么a和b的异或就是 a⊕b
两次异或就是(a⊕b)⊕(a⊕b)
所以不论a和b为何值,a⊕b=a⊕b
两次异或就是0

按二进制的位做位运算,异或运算也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)。
按位两次异或,意思含混不清,猜想是 输入 无符号整数 a,b, 计算 c = a ^ b, 然后把结果再与 b 做异或,即 d = c^b, 输出 d. (有点像二维码里的计算,b是过滤器)。[不会是自己同自己求异或,自己与自己异或永远得0。]


#include <stdio.h>
int main(){
unsigned int a,b,c;
printf("input a b:");
scanf("%d %d",&a,&b);
printf("I read %d %d or %#x %#x\n",(unsigned)a,(unsigned)b,a,b);
c = a^b;
c = c^b;
printf("result: %d or %#x\n",(unsigned)c,c);
return 0;
}

unsigned a = 1;
unsigned b = 0;
unsigned c = a ^ b;
c ^= (a^b);

相关兴趣推荐

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

联系反馈
Copyright© IT评价网