关于交换两个整数的方法--C语言

方法一:使用临时变量

void my_switch(int* a, int* b) {
    int p = *a;
    *a = *b;
    *b = p;
}

这是最直接和传统的交换两个数字的方法:

  1. 使用一个临时变量p来保存*a的值。
  2. 然后将*b的值赋给*a
  3. 最后,将存储在p中的值(*a的原始值)赋给*b

这种方法安全可靠,没有特殊限制或边缘情况。

    

方法二:使用XOR位运算

void my_switch(int* a, int* b) {
    *a = *a ^ *b;
    *b = *b ^ *a;
    *a = *a ^ *b;
}

这种方法使用XOR(异或)位运算来交换值,无需临时变量:

  1. *a变为*a*b的XOR值。
  2. 接着对这个新的*a值和*b进行XOR运算,实际上得到的是*a的原始值。
  3. 最后,*a与新的*b(现在保存着*a的原始值)再次进行XOR运算,完成交换。

XOR交换方法有一个明显的缺点:如果ab指向相同的内存地址(这会将该地址的值归零),那么它将失败。但在实际场景中,变量通常是不同的,这种情况很少发生。

方法三:使用加法和减法

void my_switch(int* a, int* b) {
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

这种方法使用加法和减法来交换值:

  1. *a被赋值为*a*b的和。
  2. 然后*b被赋值为新的*a减去原始的*b,这样得到的就是*a的原始值。
  3. 最后,*a被赋值为新的*a减去新的*b(现在保存着*a的原始值)。

如果*a*b是非常大的整数,加法和减法方法可能会有问题,因为求和可能导致整数溢出,这在C语言中是未定义行为。

main函数

main函数简单地初始化了两个整数ab,从用户那里读取它们的值,调用其中一个my_switch函数来交换它们的值,然后打印交换后的值。

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);

	my_switch(&a,&b);
	printf("%d %d", a, b);

	return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值