编程学习网 > 编程语言 > Python > c语言如何进行异或?
2022
08-13

c语言如何进行异或?

异或运算符估计很多朋友只在C语言初学运算符的章节背过一些性质,直至其理论不知其实际用法。今天就给大家分享一下c语言如何进行异或?
1不用第三变量交换两个数


A = A ^ B;
    B = A ^ B;
    A = A ^ B;

当看到这种办法以后,你会拿着两个数据来进行尝试,最后验证OK,以后估计也会不了了之,其实这中间蕴含着异或运算一个非常重要的性质。当一个数异或同一个数偶数次,最终还是得到原来的数。当B的个数为偶数,则A^B^B^B.... = A有了这个性质我们再推导一下两数交换:
	



    A = A ^ B;   .............(1) B = A ^ B;   .............(2) A = A ^ B;   .............(3) (2) => B = (A ^ B) ^  B  => B = A  (3) => A = (A ^ B) ^ (A) => A = B

将第(2)和第(3)分别展开便可以得到最终交换结果,妙呀~

2固定位翻转

点灯大师当累了,可以玩玩LED的翻转,嵌入式中是经常需要这样使用的,从异或的性质来看它是天然的翻转神器:
	



0 ^ 1 = 1 1 ^ 1 = 0

比如想对一个GPIO的数据寄存器中的1、2、5位进行翻转,你可以定时直接GPIO_DATA^0b100110便可以实现对应位的电平翻转。

当然这里只是聊了一下翻转LED,思路还可以更加的开阔~

3不用条件语句实现整数绝对值

怎么说呢?这种编程一般用在面试题里面,实际项目中基本上就是一个abs搞定了,这里主要是借助这个实例来讲讲异或的两个小技巧。
	



    A ^ 0xFF.. = ~A A ^ 0      =  A

正数的绝对值为原值,而负数的绝对值为取反+1.

那么当看到上面两个性质,以一个8位有符号数为例子,其最高位为符号位,正数为0,负数为1,那么把一个8位有符号数右移7位。

如果是正数最高位补0,最终数值为0;

如果是负数最高位补1,最终数字为0xFF,也就是-1。

以上就是“c语言如何进行异或?”的详细内容,想要了解更多C语言教程欢迎持续关注编程学习网

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取