交换两个整形变量的值(异或运算符^)

本文详细介绍了在VS2013环境下,通过使用临时变量、加减运算及异或运算三种方式实现两个整型变量值的交换。探讨了各种方法的原理、适用场景及其潜在问题,特别强调了异或运算在避免溢出方面的优势。

在vs2013环境中交换两个整形变量的值

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 10, b = 20, temp = 0;
	printf("a=%d,b=%d\n", a, b);
	temp = a;
	a = b;
	b = temp;
	printf("a=%d,b=%d", a, b);
	system("pause");         //停止程序,否则在vs2013及以上版本中无法看到结果
	return 0;
}

上面是最基本的交换两个整形变量的值的方法,添加一个中间变量,来进行交换。

而若不添加中间变量来进行两个整形变量的交换,可以使用两个变量间的关系来进行加减,得到交换的目的。
如上面代码中 a = 10 , b = 20 则可以使用 a = a+b , b = a-b ,a = a-b ,这样也可以达到效果。

但这种方法的缺陷还是很大的,如果数字过于大,则会超出 int 型变量 的范围,所以我们使用 异或运算符“^” ,来达到交换的目的。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 10, b = 20;
	    printf("a = %d,b=%d\n",a, b);
	    a = a^b;                                      // ^为二进制异或运算符"相同为0,相异为1"
		b = a^b;                                      // 10的二进制为  1010 -a
		a = a^b;                                      // 20的二进制为 10100 -b
		printf("a = %d,b=%d\n", a, b);                // a = a^b   为 11110    a,b中谁与这个值异或则出现另一个数
		system("pause");                              // b = a^b   为 01010   -10
 		return 0;                                     // a = a^b   为 10100   -20

}


这样则可以达到交换两个数的目的,而且也不用担心超出整形变量的范围了

小弟刚刚开始学习,如有不足或者是错误的地方,希望大佬们指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值