-3
我看到了一些解決方案,但看起來很複雜。在給定的整數中交換兩位
在n,m位中兩個位之間交換最有效的方法是什麼?
int swapBits(int num, int nPostion, int mPosition);
我看到了一些解決方案,但看起來很複雜。在給定的整數中交換兩位
在n,m位中兩個位之間交換最有效的方法是什麼?
int swapBits(int num, int nPostion, int mPosition);
不知道這是最有效的,但我認爲這是一個相當簡單的解決方案:更有效的(但不讀)的方式
int bitValue(int num, int nPosition)
{
return (num >> nPosition) % 2;
}
int swapBits(int num, int nPosition, int mPosition)
{
int nVal = bitValue(num, nPosition);
int mVal = bitValue(num, mPosition);
if (nVal != mVal)
{
if (1 == nVal)
{
num -= 1<<nPosition;
num += 1<<mPosition;
}
else
{
num += 1<<nPosition;
num -= 1<<mPosition;
}
}
return num;
}
相同的解決方案:
int swapBits2(int num, int nPosition, int mPosition)
{
int nVal = (num >> nPosition) % 2;
int mVal = (num >> mPosition) % 2;
if (nVal != mVal)
{
num += (-1)*(2*mVal-1)*(1<<mPosition) + (-1)*(2*nVal-1)*(1<<nPosition);
}
return num;
}
and last:
int swapBits3(int num, int nPosition, int mPosition)
{
int k = ((num >> nPosition) & 1) - (num >> mPosition) & 1;
return num + k*(1<<mPosition) - k*(1<<nPosition);
}
給定整數n,其中我們想要在位置p1和p2處交換位: 算法:如果兩個位相同,則返回相同的值,否則使用XOR切換兩個位。
unsigned int swapBits(unsigned int n, unsigned int p1, unsigned int p2)
{
return (((n >> p1) & 1) == ((n >> p2) & 1) ? n : ((n^(1 << p2))^(1 << p1)));
}
檢查:[鏈接1](http://www.geeksforgeeks.org/swap-bits-in-a-given-number/) – Vaibhav
爲什麼會交換兩個位的函數採取'INT num' ? – 4386427
取int,交換兩位數並返回交換後的新號碼 –