关于运用位运算进行数的转换方法的原理

声明:本篇博客仅是对他人博客的自我理解,作为自我学习使用

一个数^0不变 一个数^1取反

#include<stdio.h>
int main()
{
	int a = 10, b =12;
	printf("a=%d,b=%d\n", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d,b=%d", a, b);
	return 0;
}

效果图
在这里插入图片描述

位运算符号^异或:相同为0,不同为1。
原理:
最开始 a的二进制数为1010,b的二进制数为1100
发现a和b的第一位和第四位数不同,第二位和第三位相同,也就是说,我们只要转换第二位和第三位就可以。
第一次: a=a^b
经过第一次的位运算,a变为0110,此时的a可以看作一个差异值,用来表示原a与原b哪些位相同,哪些位不相同。
第二次: b=a^b
经过一次运算,知道了不同的位以及b的原值,那么就将b不同的位改变就可以。
对于原a原b的相同位,用a(差异值)的0表示。
0^1=1 0^0=0 该位的数没有发生改变。
对于原a原b的相同位,用a(差异值)1的表示。
1^1=0 1^0=1 该位的数改变。
第三次: a=a^b
还未进行第三次运算时,a仍表示差异值,接下来原理同上,相同不变,不同取反。

参考:原参考博文

posted on 2020-11-24 17:04  不依法度  阅读(93)  评论(0)    收藏  举报

导航