int swap

http://blog.youkuaiyun.com/jpzhu16/article/details/50807290


package test;

public class IntSwap
{
	/**
	 * 基本思路,增加一个临时变量,进行对调。
	 */
	public static void swap01()
	{
		long x1 = System.nanoTime();

		int a = 5;  //a被调换之前的值
		int b = 3; //b被调换之间的值
		int temp = 0; //临时变量,赋初值为0,随时赋值是一种好的编程风格
		temp = a; //将a赋值给临时变量,此时a就可以解放出来被自由赋值了
		a = b; //由于a能自由赋值,将b赋值给a,此时a已经得到调换后的值,而b也可以解放出来被自由赋值了
		b = temp; //将临时变量保存的a的值赋值给b
		System.out.println("a = " + a + " " + "b = " + b);

		long x2 = System.nanoTime();
		System.out.println(x2 - x1);
	}

	/**
	 * 基本思路,使用加减运算保存值,实现对调。
	 */
	public static void swap02()
	{
		long x1 = System.nanoTime();

		int a = 5;
		int b = 3;
		a = a + b;//此时a保存了两个需要对调的数的和,不能动,此时如果减去b,得到的值实际上就是a,需要将a的值赋值给b
		b = a - b; //此时两个数的和仍然被a保存着,但是b已经获取到了a的值,
		a = a - b; //实现了a,b的对调
		System.out.println("a = " + a + " " + "b = " + b);

		long x2 = System.nanoTime();
		System.out.println(x2 - x1);
	}

	/**
	 * 基本思路,利用乘除法保存值,实现对调。这道题目的特殊性能保证整型数的除法总能除尽,请思考为什么能除尽。
	 */
	public static void swap03()
	{
		long x1 = System.nanoTime();

		int a = 5;
		int b = 3;
		a = a * b; //此时a保存了两个数的积,不能变动,但是b此时可以自由
		b = a / b;
		a = a / b; //原理和加减法完全一致
		System.out.println("a = " + a + " " + "b = " + b);

		long x2 = System.nanoTime();
		System.out.println(x2 - x1);
	}

	/**
	 * 基本思路,利用乘除法保存值,实现对调。这道题目的特殊性能保证整型数的除法总能除尽,请思考为什么能除尽。
	 */
	public static void swap()
	{
		long x1 = System.nanoTime();

		int a = 5;
		int b = 3;
		a = a ^ b;
		b = a ^ b;//实际上相当于 a ^ b ^ b,两次异或之后得到的是a的值,将a赋值给b
		a = a ^ b;//将b赋值给a
		System.out.println("a = " + a + " " + "b = " + b);

		long x2 = System.nanoTime();
		System.out.println(x2 - x1);
	}

	public static void main(String[] args)
	{
		swap01();
		swap02();
		swap03();
		swap();
		/*
		a = 3 b = 5
		156747
		a = 3 b = 5
		19593
		a = 3 b = 5
		16328
		a = 3 b = 5
		14928
		 */
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spencer_tseng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值