当前位置:网站首页 > 技术博客 > 正文

异或运算符c语言



例:
x=4 = 0100(二进制)
y=5 = 0101(二进制)
x^y = 1=0001(二进制)


异或解释:
        对于两个二进制数字 ,若 在某一位上相同(都为0或都为1),则它们的按位异或结果该位为0; 如若不同,即 在该位上一个为0,另一个为1,则它们的按位异或结果该位为1

我们可以利用上述特性来实现按位异或的操作,具体来说:
一.将x和y进行与(&)操作结果位0100

        将一的结果进行非(~)操作1011

        A.对x进行按位非(~)操作, ~x(1011
        B.对y进行按位非(~)操作, ~y(1010
        C.将上述A.和B.的结果进行按位与(&)操作, (~x & ~y)(1010
        D.对C.的结果进行非(~)操作,  ~( ~x& ~y)(0101


三.将二中A.(1011)和D.(1010)的结果进行与(&)操作,得到0001


        这时我们发现三中的结果就变成x和y直接进行异或的结果了!!!


接下来这些操作进行逐一解释:
       在上面的操作中可以看到我们对最初的x和y的不同位(既第0位)进行了标记,仔细观察一.和C.中的结果,我们发现前三位中的每一位都是不同的,但是第0位是相同的。

        这是因为我们在第一部分先对x和y进行&操作,在第二部分我们对一的结果先~在&,因为&操作不影响二进制的不同位的结果,所以1.和a.的结果只有前三位不相同,这样我们在1.和c.的结果上进行 ~ 操作这样不同位我们就都变为1了!而前三位还是不相同!!,于是在A这一步的结果下就实现了对x和y的异或操作!!

 总的来讲我们要关心哪些位不相同,将都不相同的位置操作为1相同的位置改为不相同,这样&之后得到的结果就是a和b的按位异或。

 
  

版权声明


相关文章:

  • argparse模块详解2025-05-27 14:00:59
  • iic协议 ack2025-05-27 14:00:59
  • html的框架代码2025-05-27 14:00:59
  • kruskal算法求最小生成树2025-05-27 14:00:59
  • eboot.bin2025-05-27 14:00:59
  • ubuntu的dns配置文件2025-05-27 14:00:59
  • 路由交换技术详解与实践第1卷2025-05-27 14:00:59
  • 相机sdk是什么意思2025-05-27 14:00:59
  • 自学程序员怎么入门2025-05-27 14:00:59
  • hashmap基本原理2025-05-27 14:00:59