给定两个整形变量的值,将两个值的内容进行交换。

折月煮酒 提交于 2020-02-06 22:22:31

给定两个整形变量的值,将两个值的内容进行交换。

写法一

创建第三方变量

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 0;
	int b = 0;
	int temp = 0;
	scanf("%d%d", &a, &b);
	printf("a=%d b=%d\n", a, b);
	temp = a;
	a = b;
	b = temp;
	printf("a=%d b=%d\n", a, b);
	system("pause");
	return 0;
}

在这里插入图片描述
写法二

不创建第三方变量

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	printf("a=%d b=%d\n", a, b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a=%d b=%d\n", a, b);
	system("pause");
	return 0;
}

在这里插入图片描述

但注意会出现一个问题,a和b都是int型,输入的数字如果足够大会出现bug。 我们假设一种情况,a和b的数值大小能够在int 的内存里放下,但是相加以后数字过大导致溢出,因此仍然有一点儿缺陷。

写法三

不创建第三方变量且解决数据过大造成的溢出

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	printf("a=%d b=%d\n", a, b);
	a = a^b;
	b = a^b;
	a = a^b;
	printf("a=%d b=%d\n", a, b);
	system("pause");
	return 0}

在这里插入图片描述
关于异或
异或是指按位异或
相同的位为0
不同的位位1

例如a=3 b=5
a=011 b=101
a = a^b; 011 ^101=110
b = a^b; 110 ^101=011
a = a^b; 110 ^011=101

*a ^ 0=a a ^ a=0 *

忽略别看

今天我们家这儿的政府下了通知 ,停运所有公共交通。所有小区都封闭。不让车乱跑。也不知道这样的日子什么时候过去。 我妈出去买水果都没有卖的了,说是货送不进来。哎。
昨天有个陌生人点赞了我的博客,还蛮开心的,得到别人的肯定更加激励了我坚持下去。
希望等我大学毕业的时候,offer 拿到手软,也能像某些刚毕业的大牛拿的是年薪啊。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!