交换两个整数

一、使用临时变量

C版本:

void swap(int* a, int* b)
{
int temp = 0;
temp = *a;
*a = *b;void swap(int& a, int& b){int temp = 0;temp = a;a = b;b = temp;}
*b = temp;
}

C++版本:

void swap(int& a, int& b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}

二、不使用临时变量

方法一:

void swap(int& a, int& b)
{
if(a == b)
 return;
if(a > 0 && b > 0) || (a < 0 && b < 0)
{
a = a - b;
b = b + a;
a = b - a;
}
else
{
a = a + b;
b = a - b;
a = a - b
}
}

此方法需要考虑变量溢出问题。如果两数为同号,则以其“差”作为运算的中间变量;如果两数为异号,则以其“和”作为运算的中间变量。
方法二:

void swap(int& a, int& b)
{
if(a == b)
 return;
a ^= b;      //a与b不同的bit为1,相同为0
b ^= a;
a ^= b;
}

此方法记住两条原则即可理解:
任何一位二进制数同 1 异或都会变成另外一个
任何一位二进制数同 0 异或都保持不变

时间: 2024-12-22 15:37:14

交换两个整数的相关文章

使用指针交换两个整数的值

#include<stdio.h>void change_1(int a, int b);void change_2(int *a, int *b); int main(){ int a = 10; int b = 20; printf("changed before:"); printf("a=%d\tb=%d\n", a, b); change_1(a,b); printf("changed 1 affter:"); printf

c语言-交换两个整数

使用c来写一个函数来实现交换两个整数. 第一种 一般的方法,引用中间变量,方便快捷. 1 void swap(int *a, int *b) 2 { 3 int tmp = *a; 4 *a = *b; 5 *b = tmp; 6 } 第二种 void swap(int *a, int *b) { int tmp = *a + *b; *b = tmp - *b; *a = tmp - *b; } tmp虽然可能会溢出,但是依然能够达到交换的效果. 上面的都是引用了中间变量,再看看不使用中间变量

交换两个整数的三种方法

package com.zby.bubble; /** * <class description> 三种方法交换两个整数的值 * * @author zby * */ public class Exchange { public static void main(String[] args) { splitLine(); exchange1(Integer.MAX_VALUE, Integer.MAX_VALUE - 1); exchange1(99, 100); exchange1(Inte

算法学习 - 不申请第三个数交换两个整数的值

交换两个数 正常情况我们需要多申请一个变量来交换两个数的值(假设变量为a, b).例子如下: int temp = a; a = b; b = temp; 这样子就可以了.但这终究是一种需要申请临时变量的方法,总要去想想临时变量的名字.下面主要介绍两种方法. 直接运算 这种办法简单明了,也是我最喜欢使用的办法,因为即使是浮点型也可以用这种办法,继续假设两个变量是a和b. a = a+b; b = a - b; a = a - b; 这样就交换了!是不是很简单.一下没懂的可以找个例子去试试. 逻辑

三种交换两个整数的方法

交换 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; //(=

一个BUG?Visual Studio 2017 C++编写交换两个整数

想用一句话搞定交换: 1 int a = 2, b = 5; 2 cout << "a = " << a << ", b = " << b << endl; 3 a = (a + b) - (b = a); 4 cout << "a = " << a << ", b = " << b << endl; 然而输

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

交换两个数值的方法 题面: 设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

使用异或运算交换两个任意类型变量

这篇文章中将使用C语言,实现交换两个任意类型变量的功能.说到任意类型用C让人感觉很难做,如果是C++则使用模板函数就轻松搞定: template<class T> inline void swap(T& t1, T& t2) { T tmp; tmp = t1; t1 = t2; t2 = tmp; } 先说下使用^来交换两个整数,其代码看着简单但不容易理解 a ^= b; b ^= a; a ^= b; 有人说这种写法很奇葩,但我要说的是,异或运算是计算机很常用的操作.搞懂这

输入两个整数,放入到a与b变量中去,如果a&gt;b就将a与b中的值进行交换,否则就不交换。

import java.util.Scanner; /** * @author 蓝色以太 输入两个整数,放入到a与b变量中去,如果a>b就将a与b中的值进行交换,否则就不交换. */ public class Change { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入两个整数:"); int a = sc.nextInt