首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有按位交换不起作用的情况?

有没有按位交换不起作用的情况?
EN

Stack Overflow用户
提问于 2022-09-30 22:43:22
回答 1查看 95关注 0票数 1

几年前的某一天,在学校,我不得不做一个交换函数,交换两个整数,我想不使用第三个变量,用按位运算来实现,所以我想出了这样的方法:

代码语言:javascript
运行
复制
void swap( int * a, int * b ) {
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

我认为它很好,但是当我的功能被学校的修正程序测试时,它发现了一个错误(当然,当我问他们不想告诉我的时候),但是今天我仍然不知道什么不起作用,所以我想知道在这种情况下这种方法是行不通的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-30 22:53:00

--我想在不使用第三个变量的情况下使用按位操作来完成这一任务。

你介意我问一下为什么吗?这一限制是否有实际的原因,还是仅仅是一个智力上的难题?

当我的函数被学校的校正程序测试时,它发现了一个错误

我不知道纠正程序在抱怨什么,但是已知这种解决方案失败的一类输入就是这样的例子。

代码语言:javascript
运行
复制
int x = 5;
swap(&x, &x);
printf("%d\n", x);

这个打印的是0,而不是5

你可能会说,“为什么有人要和自己交换一些东西呢?”他们可能不会,正如我所展示的,但也许你可以想象,在一个平庸的书面排序算法中,它可能最终会完成相当于

代码语言:javascript
运行
复制
if(a[i] < a[j]) {
    /* they are in order */
} else {
    swap(&a[i], &a[j]);
}

现在,如果ij是相同的,那么swap函数将错误地将a[i]归零。

另见What is the difference between two different swapping function?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73914582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档