【C language】两个数的交换

简介: 【C language】两个数的交换

题解:两个数的交换(第三变量 + 数学求和 + 异或法)


1.题目

题目如下:请交换两个整形变量的数值,且不使用第三临时变量

2.第三变量法

int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
int temp = a;
a = b;
b = temp;
printf("swap later: a = %d; b = %d", a, b);

优点:常规且效率高
缺点:借用第三临时变量

3.数学方法

int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("swap later: a = %d; b = %d", a, b);

缺点:溢出风险

4.异或方法

int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("swap later: a = %d; b = %d", a, b);

缺点:

  • 可读性差
  • 仅适用于整形
  • 效率低

EOF

相关文章
|
4月前
|
API
MASM32编程使用PE文件头信息计算文件长度
MASM32编程使用PE文件头信息计算文件长度
|
5月前
【C language】统计某数中二进制1的个数
【C language】统计某数中二进制1的个数
【C language】统计某数中二进制1的个数
交换两个数的值的方法(三种)
交换两个数的值的方法(三种)
75 1
|
7月前
|
机器学习/深度学习
3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get
3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get
|
算法 Java
[算法] swap函数交换两个数值未改变问题解决
[算法] swap函数交换两个数值未改变问题解决
PCIE BAR空间长度计算
PCIE BAR空间长度计算
341 0
|
Python
三个一组还是四个一组?从 Bytes 到 Unicode 的字节划分方法
三个一组还是四个一组?从 Bytes 到 Unicode 的字节划分方法
163 0
三个一组还是四个一组?从 Bytes 到 Unicode 的字节划分方法
HDOJ 2016 数据的交换输出
HDOJ 2016 数据的交换输出
121 0