代码编织梦想

PS:这里用 ^ 表示异或运算,用 ^ 表示幂,为了方便观察,整数的二进制序列只用4位

什么是异或运算:

        设a=1,b=3; 那么a=0001,b=0011

        a^b=0001^0011=0010,当两个数做异或运算的时候对应的位置,如果相同则为0,不同则为1,就是说1^1=0,0^0=0 但是 1^0=1;

异或运算的特性:

1: a^b=c;当c异或b时,结果还原成a

2:一个数异或自己时等于0;

3:一个数异或0的时候,结果是其本身

不使用第三个变量交换两个变量的值:

1:相加法

int a = 1, b = 3;
	a = a + b;
	b = a - b;
	a = a - b;

缺点:我们知道,int 类型是有最大值的,当两个数刚好小于最大值,但是相加则大于最大值的时候,会照成溢出而导致计算不准确。

//利用异或的特性 

2:异或法

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

这里可以使用比较简单的理解方法:

a2=a1^b1; 
b2=a2^b1;        因为 a2=a1^b1,所以b2=a1^b1^b1; b1异或自己等于0,a1异或0等于自己
a1=a2^b2;        同理 a1=a2^a2^b1; 

========================================================== 

扩展:异或运算 又叫  不进位加法

设a=1,b=3;那么a=0001,b=0011

比如1+3;0001+0011 相加时,为0100

而异或是:0001^0011=0010        会发现其实是2^0次方位置相加了,但是2^1次方位置没有发生进位。

这里0001&0011=0001 <<1 =0010,这里1和3做与运算,然后再向左移一位,是a,b两个数相加该进位的位置,

0010和0010,再次异或等于 0000,再次进位  0010&0010<<1=0100,

0000和0100,再次异或 0100,再次进位 0000&0100<<1=0000,

会发现这里已经没有要进位的地方了,结果就是0100,会发现得到的结果跟最上面的加法无异,其实这就是相当于一个加法在计算机里面的模拟实现

int my_add(int a,int b)
{
    int sum=a;
    int carry=b;
    while(carry){
        int temp=sum;
        sum=sum^carry;
        carr=(temp&carry)<<1;
    }
    return sum;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45423515/article/details/123410473

python 下 opencv 的实现图像的基础数学计算-爱代码爱编程

系列文章目录 第一章 python 下 opencv 接口的参数详解及使用(一) 第一章 python 下 opencv 接口的参数详解及使用(二) 第二章 python 下 opencv 的实现图像的基础数学计算 第三章  python 下 opencv 接口实现图像二值化,并小解二值化原理   文章目录 目录 系列文章目录

php中使用较多的运算符,php中运算符使用方法总结_PHP教程-爱代码爱编程

算术运算符 1、算术运算符:+、-、*、/、%。 2、递增/递减运算符:如$a++,$a--,++$a,--$a. 如: 代码如下 三元运算符 (expr1) ? (expr2) : (expr3); 解释:如果条件“expr1”成立,则执行语句“expr2”,否则执行“expr3”。 以下语句的语法是正确的,它们以小解引号的方式忽略了

十九 C# 泛型-爱代码爱编程

1、泛型概述 泛型(Generics)是将类型作为参数传递给类、结构、接口和方法,这些参数通常被称作站位符,是类、就结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合是可以将类型参数用作它所存储的对象的类型的占位符:类型参数作为其字段的类型和其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其参数的类型之一。泛型为开发者提供

读书笔记:Poisson 过程 {N(t), t≥0} 的数字特征-爱代码爱编程

【Poisson 过程 {N(t), t≥0} 的数字特征】 ∙   E [ N

计算机网络之IP-爱代码爱编程

文章目录 计算机网络之IP1.IP2.IP地址分类3.专用地址4.A类地址5.B类地址6.C类地址7.IP地址8.网络地址9.广播地址10.子网掩码11.IP相关计算题 计算机网络之IP 1.IP IP协议,Internet Protocol ,互联网协议,IP协议位于网络层,主要目的是使得网络间能互联通信 2.IP地址分类

2022.3.13-----leetcode.393-爱代码爱编程

public boolean validUtf8(int[] data) { int n = data.length; for (int i = 0; i < n; ) { int t = data[i], j = 7; while (j >= 0 &&a

WebRTC 通话原理-爱代码爱编程

WebRTC通话原理STUN和TURN STUN做了什么? 告诉我你的公网IP地址+端口是什么。但是STUN并不是每次都能成功的为需要的NAT通话设备分配IP地址的。P2P使用本地带宽。多人视频通话的过程中,通话质量的好坏旺旺需要根据使用者本地的带宽确定。 STUN干不了的,TURN干。 STUN分配公网失败后,可以通过TURN服务器请求公网IP地

CompletableFuture异步任务编排-爱代码爱编程

使用jdk8中的java.util.concurrent.CompletableFuture非常方便进行异步任务编排 1.supplyAsync 开启异步任务 /** * 1.小白点菜 * 2.厨师做菜 * 3.小白吃饭 */ public static void test1() { SmallTools.printTimeAndThr

IMS 网络架构(三)-爱代码爱编程

目录 LTE 网络架构 IMS 网络架构   IMS 网元功能  P-CSCF (Proxy Call Session Control Function)  I-CSCF (Interrogating-CSCF) S-CSCF (SIP-CSCF) HSS:The Home Subscriber Server  SLF 功能  App

C#文件流FileStream-爱代码爱编程

class Program { static void Main(string[] args) { // FileStream // 写 #region Writebyte //using (FileStream fWri