您的位置:首页 > 编程语言 > C语言/C++

开始学习C语言C++在这里记录自己的成长。简单的两变量交换问题

2016-03-15 12:34 531 查看
这几天开始着手学习C语言C++,今天正事加入CSDN的大家族,希望在这里共同成长,学到更多的知识。第一次写博客,有哪些不对的地方希望各位大神批评指出。

刚接触到一个双变量交换的简单问题在这里讨论两个变量的交换问题好像过于简单了点,毕竟本人刚刚开始学习,就当是自己一点一滴的成长吧,希望大家不要见笑,下面就来写写实现它的几种不同的方法。

1.好多人遇到这种问题的第一想法肯定是声明一个中间变量,然后利用中间变量来实现变量交换。如下:

#include<stdio.h>

#include<stdlib.h>

int main()

{

int a =2, b =4, temp;

temp = a;

a = b;

b = temp;

printf("a=%d,b=%d\n",a,b);

system("pause");

return 0;

}

仅仅几行代码这个问题就被解决掉了,轻松,Easy.

那么如果不利用中间变量,就在已经给定的两个变量的情况下要怎么来实现呢?当时我想到的也就是第一种方法,原谅自己太笨。其实还乐意利用加减法和乘除法来解决这个问题。

2.利用加法和乘法通过改变其中一个变量的值,然后继续减或除,改变另一个变量的值,从而实现交换。

a = a + b;

b = a - b;

a = a - b;

--------------------------------------------------------------------------

a = a*b;

b = a / b;

a = a / b;

这样也就简单的实现了交换问题。但是如果稍加思索你就会发现这种做法其实是存在安全隐患的,开始声明的两个变量都是整形的,而且变量的值比较小,如果变量值在比较大的情况下,通过加和乘又赋值给整形变量那么难免会超出整形变量的表示范围,这样就出错了。

那么还有什么办法来解决这个问题呢?办法当然是有的,就是利用逻辑运算符。

3.通过利用异或(“^”)逻辑运算符来实现。变量在计算机中存储的时候都是转化成对应的二进制来存储的。

其中:(方便起见这里只用四位二进制表示)

a:0010

b:0100

a^b:0110

不难发现:b=(a^b)^b :0010

a=b^(a^b) :0100

a = a^b;

b = a^b;

a = b^a;

这样这个问题也就解决掉了。

但是考虑到程序的安全性,时间开销和空间开销,相比之下三种方法中还是第一种更好一点。

如果博客中有什么问题和遗漏希望各位大神批评指出,谢谢大家。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: