两个变量中的值进行互换的方法

在软件开发的过程中,经常会将两个变量中的值进行互换。那么两个变量中的值进行互换的方法有几种呢?

常见的两个变量中的值互换的方法有三种,下面将进行一一介绍,当是一个总结。

第一种方法:

int a = 3, b = 4;
int tmp;

tmp = a;
a   = b;
b   = tmp;

这种方法的优点是:代码可读性强,容易理解。

缺点是:使用第三方变量,浪费内存;

第二种方法:

int a = 3, b = 4;

a = a + b;  
b = a - b;   
a = a - b;

这种方法的优点是:没有第三方变量,节省内存空间;

缺点是:存在数据溢出问题,可读性不强。

数据溢出问题的原因:当两个变量a, b中的数值比较大时, a+b的值就有可能超过了一个int的数据范围,造成数据溢出。

第三种方法:

int a = 3, b = 4;

a = a ^ b;  // a ^ b ^ b = a
b = a ^ b;  // b = a ^ b ^ b = a
a = a ^ b;  // a = a ^ b ^ a = b ^ a ^ a = b

//这种方法的思想是:
                   利用异或的原理。 a ^ 0 = a, b ^ b = 0 ,则 a ^ b ^ b = a

这种方法的优点是:没有引入第三方变量,不存在数据溢出的问题

缺点是:可读性不强,技巧性太强,不容易想到。

时间: 2024-08-29 23:18:18

两个变量中的值进行互换的方法的相关文章

将两个变量中的值进行互换的几种方法

 在做软件开发的过程中,经常需要将两个变量中的数值进行互换.我们可以使用的互换方法有三种. 第一种方法: int a = 3, b = 4;int tmp; tmp = a;a = b;b = tmp;   这种做法,是我们经常用到的做法,就是通过借助第三变量.             优点是:可读性强.             缺点是:引入第三方变量,占用内存大. 第二种方法: int a = 3, b = 4; a = a + b ; // a = 7;   原理是利用两个数的和  a +

案例三:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写一个程序模拟这一个过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并输出互换后的结果。

package project_03; /** * 2018-9-7 20:19:59 * @author Sauron XiaMen * */ public class ChangeCard { //将两个变量的值互换 public static void main(String[] args) { System.out.println("输出互换前手中的纸牌:"); int left=10; int right=8; int i=0; System.out.println(&quo

其他文本处理命令以及bash变量中的一些字符串的处理方法

其他的文本处理命令: 1.wc 2.cut命令: cut - 在文件的每一行中提取片断 注意:能够被cut修剪的文件或数据内容,一般是具有某种特定格式或结构的文本文件或数据内容: 如 :/etc/passwd 格式:cut [OPTION]... [FILE]... 常用选项: -d, --delimiter=DELIM:指定在实施修剪操作时所使用的字段分隔符号,默认是TAB(空白字符): -f, --fields=LIST:根据指定的字段分隔符号来指定要保留的字段编号列表: LIST可以称为字

Java中对比两个对象中属性值[反射、注解]

在Java中通常要比较两个对象在修改前与修改后的值是否相同,一般我们采用的是反射技术获取对象的get方法[或其他的方法]获取值并做比较.如果系统将修改的属性名称也显示出来,这样就能更直观的显示类中的哪一个属性的值被修改了.然后Java中只能获取属性的名称,也就是英文标识的属性名,但是一般我们都会在属性后面添加属性的注释,但是Java不提供注释获取的方法.所以我们只能使用另外一种方式来将属性和属性注释关联起来,这就是Java中的@Annotation. public static  Map<Str

sed在替换的时候,使用变量中的值?如何在sed实现变量的替换?获取到变量中的值?

需求描述: 今天在做nrpe配置的时候,想要通过批量的方式来将定义文件中的IP给替换掉 开始做的时候没有成功,报错了.在此记录下,如何实现,获取到变量的值,然后 进行替换. 操作过程: 1.原文件的内容 [[email protected] hosts]# cat 192.168.53.26.cfg define host {     use                     linux-server    host_name               192.168.53.26   

php 对比两个数组中的值是否相等

$a = ['1','2','4','3'];//提交答案 $b = ['2','1','3'];//正确答案 $state = $this->diffArray($b, $a); echo '<pre>'; print_r($state);die; /** * 以第一个参数为主进行进行比较 * **/ public function diffArray($arr1 , $arr2 ){ $arrRet = array(); #针对关联数组 if($this->is_assoc($

交换两个变量的值的三种实现方式

交换两个变量的值的方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>交换两个变量的值的方式</title> </head> <body> <script> //第一种方式:使用第三方的变量进行交换 var num1 = 11; var num2 = 12; //把

函数的调用(取两个整型变量中的最大值)

namespace c编程练习题 { class Program { /// <summary> /// 求两个整型变量中的最大值. /// </summary> /// <param name="n1">第一个变量</param> /// <param name="n2">第二个变量</param> /// <returns>两个变量中的最大的值</returns> p

js中 原始值和引用值

在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值. 原始值-----存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置; 引用值-----存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处. 如果一个值是引用类型的,那么它的存储空间将从堆中分配.由于引用值的大小会改变,所以不能把它放在栈中,否则 会降低变量查寻的速度.相反,放在变量的栈空间中的值是该对象存储在堆中的地址.地址的大小是固定的,