整型数据不借助临时变量实现数值交换

为什么写这篇文章?
      只是单纯的介绍一种数值交换的方式。想起之前大学的时候,室友问了我一个问题,如何不借助临时变量将两个整型数据进行数值交换。我当时花了好一会儿时间也没有思路。我对自己还是比较理解的,一个问题一旦花了较长时间都没有思路,那么这个问题在没有提示的情况下我很可能是想不出来的,所以我直接问他怎么做的。
      原来思路如此简单,就是将两个数值的和赋值给a,然后将两个数值的差赋值给b,最后将两个数值的差赋值给a。
      公式化就是a=a+b;b=a-b;a=a-b。而且经过测试就算相加的和越界了也不影响数值交换的结果,虽然感觉这个东西没啥大用,但是感觉这个思路很清新,所以一直都忘不了这个骚操作。
测试及结果
测试代码

package per.test;

public class SimTest {

	public static void main(String[] args) {
		System.out.println("Integer.MAX_VALUE");
		int a = Integer.MAX_VALUE - 10;
		int b = Integer.MAX_VALUE - 100;
		System.out.println("before");
		System.out.println("a=" + a);
		System.out.println("b=" + b);
		System.out.println("a+b=" + (a + b));
		a = a + b;
		b = a - b;
		a = a - b;
		System.out.println("after");
		System.out.println("a=" + a);
		System.out.println("b=" + b);
		
		System.out.println("=====这是华丽的分割线=====");
		System.out.println("Integer.MIN_VALUE");
		a = Integer.MIN_VALUE + 10;
		b = Integer.MIN_VALUE + 100;
		System.out.println("before");
		System.out.println("a=" + a);
		System.out.println("b=" + b);
		System.out.println("a+b=" + (a + b));
		a = a + b;
		b = a - b;
		a = a - b;
		System.out.println("after");
		System.out.println("a=" + a);
		System.out.println("b=" + b);
	}

}

测试结果

Integer.MAX_VALUE
before
a=2147483637
b=2147483547
a+b=-112
after
a=2147483547
b=2147483637
=====这是华丽的分割线=====
Integer.MIN_VALUE
before
a=-2147483638
b=-2147483548
a+b=110
after
a=-2147483548
b=-2147483638
发布了46 篇原创文章 · 获赞 10 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/sqhren626232/article/details/97135548
今日推荐