异或运算实现两数交换

1.异或定义

1 ⊕ 1 = 0

0 ⊕ 0 = 0

1 ⊕ 0 = 1

0 ⊕ 1 = 1

简单说就是,相同为0,不同为1。

2.C++实现方法

 1 #include <iostream>
 2
 3 int main()
 4 {
 5       int a, b;
 6       std::cout << "请输入要交换的两个数:";
 7       std::cin >> a >> b;
 8       std::cout << "交换前:\na=" << a << "  b=" << b << "\n";
 9       if (a == b)
10       {
11       }
12       else
13       {
14             a = a ^ b;
15             b = a ^ b;
16             a = a ^ b;
17       }
18       std::cout << "交换后:\na=" << a << "  b=" << b << "\n";
19
20       return 0;
21 }

时间: 2024-12-11 17:58:04

异或运算实现两数交换的相关文章

实现两数交换的几种方法

#实现两数交换的几种方法: - - 1.常见的方法(采用临时变量) int x=10; int y=20; int temp=x;//定义临时变量 x=y; y=temp; - 2.异或的方法 int x=10; int y=20; x=x^y; y=x^y;//y=x^y^y=x;即y=10; x=x^y;//x=x^y^x=y;即x=20; ``` - 3.自加的方法 int x=10; int y=20; x=x+y;//x=30; y=x-y;//y=30-20=10; x=x-y;//

C语言与汇编的嵌入式编程:汇编调用函数(两数交换)

编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b= temp; //printf("a=%d,b=%d,temp=%d\n",a,b,temp); } void main(){ int a=0; int b=0; char *str1="a=%d,b=%d\n"; printf("++++++\

异或运算实现两个数的交换

通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量: a = a ^ b;     b = a ^ b;     a = a ^ b; 这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质: 1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0 2.任意一个变量X与0进行异或运算

运用异或运算实现两个数不通过中间变量交换值的原理分析

或许对于像我现在这样的初学者很多都没见过这个符号 ^ 这个是个异或运算的符号,好的,我们现在开始分析它的运行原理! 异或运算的知识请点击此连接后了解 http://baike.baidu.com/view/1452266.htm 将i和j的初始值给2进制化后 分别为 10 -- 05  -- 12  -- 01 10的二进制就为1010 ----------------------------- 5 -- 1 2 -- 0 1 5的二进制就为 101 第一步: i=i^j; 好了,我们将2个数都

异或巧妙实现两变量交换

今天在看C语言的位运算时,看到了如下交换a,b两值的方法: a = a^b; b = a^b; a = a^b; 后来想想,真是太神奇了!其实,我们首先知道,对于任意的x满足: x^x == 0; x^0 == x; 那么上面的式子事实上是利用了如上的规则,首先用a保存了a^b的 值,再用b = a ^ b = (a^b)^b=a^b^b=a^(b^b)=a^0=a,这样就成功的实现了b = a:接着又用a = a^b = (a^b)^b(第一个b还是原来的b,而第二个b已经是a的值,因为前面已

python 两数交换新写法原理

今天学python,突然发现没有swap函数,那怎么交换两个数呢,难道手写交换,那效率太差了 我们看一下实例 a = 1 b = 2 a,b = b,a print(a,b) 其实很简单的原理,然而我却琢磨了半天,可能陷入了过程化编程的思维里,一直纠结a和b到底谁先赋值,怎么交换了,想了半天百度一下,瞬间清晰了 个人想法: 变量只是存储一个值,我们用用新变量指向另一个变量时,其实指向的是另一个变量存储的值 那么这里就可以这么理解了,a,b = b,a 其实变相的给前面 a,b  两个变量他们的指

指针实现两数交换和指向函数的指针

指针就是地址,而指针变量就是存储地址的变量. 1.指针与函数 利用指针解决: C语言中函数的参数采用"单向传递",故第一个程序中改变形参不会改变实参,而在第二个程序中,使用指针变量作为参数,改变指针变量所指向的值,函数调用结束后,变量值被保留下来. 2.指向函数的指针的应用

位运算求两数的最大值与最小值

1.最小值:(y^(x^y)&-(x<y)). 2.最大值:(y^(x^y)&(x<y-1))或(x^(x^y)&-(x<y)).

宏定义实现两数交换

#include<stdio.h> #define SWAP(VALUE1,VALUE2) do{ VALUE1 += VALUE2; VALUE2 = VALUE1 - VALUE2; VALUE1 = VALUE1 - VALUE2;}while(0) int main() { double a,b; a = 2; b = 1; printf("a = %lf,b = %lf\n",a,b); SWAP(a,b); printf("a = %lf,b = %l