交换两个数值的方法,注意有【坑】,闲来无事,总结一下

交换两个数值的方法

题面:
设a,b两个整数值,交换两个a,b二者的值,
例如:
设 a=1, b=2,
交换后 a=2,b=1

这几种方法,网上也说过很多,但是都没注意这几种方法的【坑】,不要只顾着新奇方法,毕竟【可靠性】很重要,这里稍微记录下


方法1

最简单的方法就是加一个中间量:

int c=a;
a=b;
b=c;

方法2

使用异或运算 xor:

a = a xor b;  //a=3, b=2
b = a xor b;  //a=3, b=1
a = a xor b;  //a=2, b=1

注意:
用异或交换两个整数的陷阱-liubird-ChinaUnix博客
逻辑异或 - 维基百科,自由的百科全书


方法3

使用加法暂存

a = a + b;  //a=3, b=2
b = a - b;  //a=3, b=1
a = a - b;  //a=2, b=1

注意:
a,b的值为足够大的值,例如在int 16位的情况下, a,b 都为2^16,那么a,b相加就会出现溢出情况。
refer: 交换两个整型数的方法 - Fangzhen - 博客园

其它方法

待补充

时间: 2024-10-07 14:52:17

交换两个数值的方法,注意有【坑】,闲来无事,总结一下的相关文章

C语言中交换两个数值的方法

//方法1    int  one = 1;    int two = 2;    int temp = 0;    temp = one;    one = two;    two = temp;    printf("one = %d\n", one);    printf("two = %d\n", two);            //方法2    int a1 = 5;    int a2 = 8;    a1 = a2 - a1;    a2 = a2

交换两个值的方法

交换两个值的方法 1.利用temp变量交换 temp=a; a=b; b=a; 2.加减法交换 b = a - b; a = a - b; b = a + b; 3.异或交换 a = a ^ b; b = a ^ b; a = a ^ b; 版权声明:本文为博主原创文章,未经博主允许不得转载.

Java小案例——交换两个数值的三种方法

要求: 互换两个数的值 方法一:借助第三方变量 /** * 借助第三方变量对两个值进行互换 * @author Administration * */ public class ExchangeValue { public static void main(String[] args) { int a = 10; int b = 15; System.out.println("a的值:"+a+",\tb的值:"+b); System.out.println(&quo

java交换两个数的常见方法及效率测试

原文地址--http://blog.csdn.net/qq525099302/article/details/47294443 论两个数的交换的重要性 讨论交换两个数的方法对某些人来说无聊,但某些人很乐意探究,甚至某些面试官喜欢用这个做文章.刚出来找工作笔试的时候我也碰到与之相关的问题. 常见的两个数交换的方法 边赋值边运算 加减减交换 用中间变量交换 异或交换 下面是代码 public class Test { public static void main(String[] args) {

交换两个数值(值类型,引用类型)

变量可以理解为一块空间,int类型变量,就是创建4个字节单位的空间.一块空间单位,只能存取一个值. 值类型交换数字的方法.首先说一下,值类型:值类型就是存在栈上的.简单的理解下,内存是怎么样分配的呢,静态存储区,就是在程序编译的时候,内存就已经分配好了的,并且存在周期是程序的整个运行周期,全局变量,静态变量等.栈上分配:其实也是在程序的运行的时候,可以分配固定太小的内存,并且可以由操作系统自动回收的功能.既然,值类型,引用类型,我觉得值类型存在的必要是什么,什么都是以对象来实现的,不存在值类型,

三种交换两个整数的方法

交换 int a, int b 1.最弱的方法 1 void swap(int &a,int &b) 2 { 3 int c = a; 4 a = b; 5 b = c; 6 } 2.不用另外开辟空间的方法 1 void swap(int &a,int &b) 2 { 3 a=a+b; 4 b=a-b; 5 a=a-b; 6 } 3.高效的位操作 1 void swap(int &a,int &b) 2 { 3 a=a ^b; 4 b =a^ b; //(=

一种不用参数交换两变量值的方法

除了最简单的三变量法外 还有一种不用参数的交换法 #include <stdio.h> int main(){ int a,b; scanf("%d%d",&a,&b); a=a+b; b=a-b; a=a-b; printf("%d %d\n",a,b); return 0;} 这种方法范围窄,只有定义了加减法的数据类型才可以使用 但只是输出交换变量 所以最简单的方法是 scanf("%d%d",&a,&am

不借助第三个变量交换两个数值类型变量的值

原文地址:http://blog.csdn.net/web_hwg/article/details/75045689 方法一 最简单的方法是用一个临时变量 var a = 10, b = 20; var temp = a; a = b; b = temp; 方法二 让其中一个变量变成一个与a和b都有关系的值 a = a + b; b = a - b; a = a - b; 或者 a = a - b; b = a + b; a = b - a;

交换两个数值型变量的值,不使用中间变量

var a = 10; var b = 20; var sum = a+b; b = sum - a; a = sum - b; //此时的b里边存的是a的值; 不借助sum 而是使用给a重新赋值的办法,等于把a作为中间变量 var a = 10; var b = 20; a = a+b; //此处给a重新赋值,所以给b重新赋值 b = a - b; a = a - b; //此时a还是a+b 但是b已经被重新赋值 等于a