如何不使用第三个变量直接交换两者数值?除了四则运算之外下面给出两种思路:
1.使用异或的方法来进行交换,这种方法主要利用了异或的特性a^b的值先保存到a,因为a^b^b=a所以可以顺利完成交换。下面是程序代码:
#include <stdio.h> int main() { int a = 4; int b = 5; printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); printf("\n"); a = a ^ b; b = a ^ b; a = a ^ b; printf("----------------------------------下面是结果------------------------------------\n"); printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); return 0; }
2.使用移位的方法,把原来的int类型的a,把a的值拆分成高16位和低16位,相当于多了16位的暂存空间可以周转。下面是一段代码:
#include <stdio.h> int main() { int a = 32123; int b = 12345; printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); printf("\n"); a <<= 16; a |= b; b = a >> 16; a = a & 0xffff; printf("----------------------------------下面是结果------------------------------------\n"); printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); return 0; }
注意*
这时候我们要思考了,对于四则运算交换数值,要注意数值越界问题,比如对于int型变量却输入一个非常大的数值这时候进行交换一定会出现问题。本文中的方法2也是如此如果数值超过16位也会出现问题。但方法一却是完美的,所以推荐大家使用方法一完成此类问题。
![]()
文章转自* https://blog.csdn.net/bluestar2009/article/details/79694227?utm_source=app