这个问题是在一次C++面试中提出的。当时我没有提供一个好的答案,所以我希望从这里的人们获得反馈和建议。现在我有更多的时间来想出一个解决方案,我认为自己写了一个不错的解决方案。我认为只要a
和b
引用不同的整数,这个方法就可以很好地工作。如果a
和b
引用相同的整数,那么该整数将被覆盖为0。
void SwapRightMostNBits(int& a, int& b, unsigned int n){
if (n>31) { n=31; }
int mask=static_cast<int>(pow(2,n)-1);
a ^= (b & mask);
b ^= (a & mask);
a ^= (b & mask);
}
temp
变量进行常规交换,并提到异或技巧作为另一种选择。 - user4442671