Ich sah ein paar Lösungen, aber es sieht komplex aus.Tauschen Sie zwei Bits in gegebener Ganzzahl
Was ist der effektivste Weg, um zwischen zwei Bits in n, m-Positionen zu tauschen?
int swapBits(int num, int nPostion, int mPosition);
Ich sah ein paar Lösungen, aber es sieht komplex aus.Tauschen Sie zwei Bits in gegebener Ganzzahl
Was ist der effektivste Weg, um zwischen zwei Bits in n, m-Positionen zu tauschen?
int swapBits(int num, int nPostion, int mPosition);
Nicht sicher ist es die effektivste, aber ich denke, das ist eine ziemlich einfache Lösung ist:
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;
}
Gleiche Lösung in einer effizienteren (aber weniger lesbar) Art und Weise:
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;
}
und zuletzt:
int swapBits3(int num, int nPosition, int mPosition)
{
int k = ((num >> nPosition) & 1) - (num >> mPosition) & 1;
return num + k*(1<<mPosition) - k*(1<<nPosition);
}
Gegebene Ganzzahl n, in der wir das Bit an der Stelle p1 und p2 austauschen möchten: Algorithmus: Wenn beide Bits gleich sind, dann gebe einfach denselben Wert zurück, ansonsten beide Bits mit XOR umschalten.
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)));
}
Check this: [Link-1] (http://www.geeksforgeeks.org/swap-bits-in-a-given-number/) – Vaibhav
Warum sollte eine Funktion tauschen zwei Bit nehmen 'int num' ? – 4386427
Take int, tausche zwei Bits in der Zahl und geben die neue Zahl nach dem Swapping zurück –