C语言里的按位异或运算符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

扩展资料:

异或,英文为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 第一、C语言中异或运算符为^,顾名思义就是不同为1,相同为0;具体就是0^0等于0,1^1等于0,0^1等于1,1^0等于1;

第二、异或运算的用途:First:可以是使一个数中的某些特定位进行翻转;例如对整数10100001(即整数161在进行位运算过程中,是以补码的形式操作的)中的第1位和第3位进行翻转(最低位【即权值最小,即最右侧】),用00000111与其做异或运算即可;Second:可以实现两个值的交换,而不需要借助temp,如 int a=12,b=161; a=a^b;b=b^a;a=a^b;进行操作后,a=161,b=12;Third:a=a^b^b;进行这波操作后a还是原来的a;
第三、谢谢各位看官,初来乍到,多多支持(点赞)
参考技术B 1:“按位与”运算符(&)用法是如果两个相应的二进制位都为1,则该位的结果值为1否则为0。0&0=0,1&0=0,1&1=1
2:“按位或”运算符(|)用法是如果两个相应的二进制位有一个为1,则该位的结果值为1否则为0。0&0=0,1&0=0,1&1=1
0,1&0=1,1&1=1
3:“异或”运算符(^)用法是如果两个相应的二进制位为同号,则该位的结果值为1否则为0。0&0=1,1&0=0,1&1=1本回答被提问者采纳
参考技术C 1:“按位与”运算符(&)全1为1,有0则0。0&0=0,1&0=0,1&1=1
2:“按位或”运算符(|)有1则1,全0则0。0|0=0,1|0=1, 1|1=1
3:“异或”运算符(^)相同为0,不同为1。0^0=0,1^0=1,1^1=0
参考技术D C语言中^为按位异或运算符,若两个二进制位相同,则结果为0,不同为1

#include "stdio.h"
main()

int a=6,b=10,c;
c=a^b;
printf("%d",c);

函数输出结果为12

将6和10分别转换为2进制数为0110(前边补了个0)和1010。然后按照定义进行异或运算

0110 a
1010 b
1100 a和b最左边第一位和第二位不相同,所以分别为1,第三位和第四位相同,所以分别为0

二进制数1100转换为10进制数,结果是12。

matlab 如何实现按位异或 g=01001011 q=10100010 如何实现g q的按位异或 结果也是8位

参考技术A >> clear
>> g=uint8(bin2dec('01001011'));
>> q=uint8(bin2dec('10100010'));
>> c=dec2bin(bitxor(g,q))

c =

11101001

>>
其中bitxor是按位异或, 位运算函数要求输入必须同为无符号整数、无符号整数数组或者标量浮点数,且输出与输入的类型一致。dec2bin和bin2dec为二进制和十进制互相转换的函数。以上函数详细用法请查看help本回答被提问者和网友采纳

以上是关于C语言里的按位异或运算符的主要内容,如果未能解决你的问题,请参考以下文章

matlab 如何实现按位异或 g=01001011 q=10100010 如何实现g q的按位异或 结果也是8位

如何基于比较两列熊猫的按位异或创建列

按位与&按位或|按位异或^

按位异或(异或)是啥意思?

按位异或运算符

Python "按位或"和"按位异或"的区别