交换两个整数的三种方法

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(Integer.MIN_VALUE, Integer.MIN_VALUE + 1);
        splitLine();
        exchange2(Integer.MAX_VALUE, Integer.MAX_VALUE - 1);
        exchange2(99, 100);
        exchange2(Integer.MIN_VALUE, Integer.MIN_VALUE + 1);
        splitLine();
        exchange3(Integer.MAX_VALUE, Integer.MAX_VALUE - 1);
        exchange3(99, 100);
        exchange3(Integer.MIN_VALUE, Integer.MIN_VALUE + 1);
        splitLine();
    }

    /**
     * <method description>使用一个临时变量交换,优点:对于其他类型同样适用。
     *
     * @param a
     * @param b
     */
    public static void exchange1(int a, int b) {
        System.out.println("使用临时变量法进行交换,引入第三方变量");
        System.out.println("交换之前:a=" + a + ",b=" + b);
        int temp = a;
        a = b;
        b = temp;
        System.out.println("交换之后:a=" + a + ",b=" + b);
    }

    /**
     * <method description>重点:一个整数异或另一个整数两次,得到的还是这个原来的数。优点:不引入临时变量;缺点:只能对整数使用。
     *
     * @param a
     * @param b
     */
    public static void exchange2(int a, int b) {
        System.out.println("使用异或法进行交换,不引入第三方变量");
        System.out.println("交换之前:a=" + a + ",b=" + b);
        a ^= b;
        b ^= a;
        a ^= b;
        System.out.println("交换之后:a=" + a + ",b=" + b);
    }

    /**
     * <method description>注意:加减法交换可能导致溢出,但是,没影响!!!!!溢出去又溢回来,结果是对的,是可以放心用的!!!!!之前进入误区以为溢出会有什么问题,然而并没有。
     *
     * @param a
     * @param b
     */
    public static void exchange3(int a, int b) {
        System.out.println("使用加减法进行交换,不引入第三方变量");
        System.out.println("交换之前:a=" + a + ",b=" + b);
        a += b;
        b = a - b;
        a -= b;
        System.out.println("交换之后:a=" + a + ",b=" + b);
    }

    public static void splitLine() {
        System.out.println("----------华丽丽的分割线----------");
    }
}
----------华丽丽的分割线----------
使用临时变量法进行交换,引入第三方变量
交换之前:a=2147483647,b=2147483646
交换之后:a=2147483646,b=2147483647
使用临时变量法进行交换,引入第三方变量
交换之前:a=99,b=100
交换之后:a=100,b=99
使用临时变量法进行交换,引入第三方变量
交换之前:a=-2147483648,b=-2147483647
交换之后:a=-2147483647,b=-2147483648
----------华丽丽的分割线----------
使用异或法进行交换,不引入第三方变量
交换之前:a=2147483647,b=2147483646
交换之后:a=2147483646,b=2147483647
使用异或法进行交换,不引入第三方变量
交换之前:a=99,b=100
交换之后:a=100,b=99
使用异或法进行交换,不引入第三方变量
交换之前:a=-2147483648,b=-2147483647
交换之后:a=-2147483647,b=-2147483648
----------华丽丽的分割线----------
使用加减法进行交换,不引入第三方变量
交换之前:a=2147483647,b=2147483646
交换之后:a=2147483646,b=2147483647
使用加减法进行交换,不引入第三方变量
交换之前:a=99,b=100
交换之后:a=100,b=99
使用加减法进行交换,不引入第三方变量
交换之前:a=-2147483648,b=-2147483647
交换之后:a=-2147483647,b=-2147483648
----------华丽丽的分割线----------
时间: 2024-08-04 14:36:45

交换两个整数的三种方法的相关文章

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

php求两数组交集的三种方法

题目: 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1],nums2 = [2,2]输出: [2]示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明: 输出结果中的每个元素一定是唯一的. 我们可以不考虑输出结果的顺序. 解法一:迭代一个数组 思路分析: 迭代一个数组,判断是否存在另外一个数组 PHP 代码实现: /** * @param Integer[] $nums1 * @pa

C#中Math类的计算整数的三种方法

1.Math.Round:四舍六入五取偶 引用内容 Math.Round(0.0) //0 Math.Round(0.1) //0 Math.Round(0.2) //0 Math.Round(0.3) //0 Math.Round(0.4) //0 Math.Round(0.5) //0 Math.Round(0.6) //1 Math.Round(0.7) //1 Math.Round(0.8) //1 Math.Round(0.9) //1 说明:对于1.5,因要返回偶数,所以结果为2.

php保留两位小数的三种方法

around:a.代码: <?php $num1 = round(5,2); $num2 = round(5.123,2); echo $num1.PHP_EOL; echo $num2.PHP_EOL; b.输出: 5 5.12 sprintf:a.代码: <?php $num1 = sprintf('%.2f',5); $num2 = sprintf('%.2f',5.123); echo $num1.PHP_EOL; echo $num2.PHP_EOL; b.输出: 5.00 5.12

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虽然可能会溢出,但是依然能够达到交换的效果. 上面的都是引用了中间变量,再看看不使用中间变量

mfc 在VC的两个对话框类中传递参数的三种方法

弄了好久,今天终于把在VC中的对话框类之间传递参数的问题解决了,很开心,记录如下: 1. 我所建立的工程是一个基于MFC对话框的应用程序,一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMDDDlg类.在主对话框上我放置了一个标签页(Tab Control)控件,其实现的功能是当单击标签提示A时进入页面A,即对话框A(所对应的类为CDialogChild1),单击B时进入对话框B(CDialogChild2). 整个工程的框架已经设计好了,在对话框A和对话框B上放置了许多控件,现在我想

Qt打开外部程序的三种方法(两种阻塞,一种不阻塞)

Qt打开外部程序 [cpp] view plaincopy //1.通过调用系统函数 system("opt/myApp"); //这是linux下的,windows下可以用WinExec等函数 //2.通过QProcess,阻塞调用 QProcess::execute("/opt/myApp"); //绝对路径和相对路径都可以,windows下要带exe后缀,系统应用如记事本notepad可直接输入打开 //3.通过QProcess,非阻塞调用 QProcess 

javascript浮点数转换成整数三种方法

将浮点数转换成整数方法有很多,分享三种常用方法. Summary 暂时我就想到3个方法而已.如果读者想到其他好用方法,也可以交流一下 parseInt位运算符Math.floor Math.ceil Description 一.parseInt 1. 实例 parseInt("13nash");//13 parseInt("")// NaN parseInt("0xA") //10(十六进制) parseInt(" 13")/

C语言编程 求两个数的平均值方法(三种方法)

第一种方法是最常见的average=(a + b) / 2这种方式,求两个数的平均值 第二种方法是当 a<b 时averag=a+(b-a)/2 这里着重介绍的是第三种方法 average=(a&b) + (a^b)>>1 推导过程如下a + b = (a&b) 2 + (a^b)) --->average=((a&b)2+(a^b))/2 ---->average=(a&b) + (a^b)>>1 eg:两个数为15和515二进制