Im Versuch, die FunktionSetzen von Bits bei Verschiebungen unter Verwendung von bitweisen Operatoren
int test(int x, int y)
{
int result = 0;
int i;
for (i = y; i <= x; i++)
result |= 1 << i;
return result;
}
die zwei ints nimmt zu replizieren und ein Bit für jede Position zwischen den beiden Nummern setzt. Angenommen, 0 (0) < = x < = 31 und 0 < = y < = 31. Zum Beispiel (7, 5) wird 1 bis 1110 0000 gesetzt, wo ein Bit nach dem Verschieben von 5, 6 und 7 mal gesetzt wird.
Ich versuche das Gleiche zu tun, bin aber darauf beschränkt worden, nur bestimmte bitweise Operatoren zu verwenden (~ & + < <). Allerdings habe ich Schwierigkeiten, einen Weg zu finden, der keine Schleife verwendet. Die Funktion sollte 0 zurückgeben, wenn y> x.
Ich glaube, ich kann den oder Operator x | y mit ~ replizieren (~ x & ~ y).
und x^y unter Verwendung von ~ (~ (& y) & ~ (x & ~ y));
http://www.tutorialspoint.com/cprogramming/c_operators.htm
Einfacher zu replizieren, wenn der Code 'unsigned test (unsigned x, unsigned y) 'anstelle von' int' verwendet. Negative Werte und "int" Überlauf sind ein Schmerz. – chux
Aufruf von '+' einem 'bitweisen Operator' ist ein wenig ungewöhnlich. Das Problem ist also, dass die überarbeitete Funktion einen Bereich von Werten für "x" und "y" (was ist der maximal zulässige Wert - 6, 7, 14, 15, 30, 31, 62, 63?) Und muss _not_ verwenden Sie eine Schleife, um dies zu tun? Kann es Konditionale verwenden? –
@ JonathanLeffler Entschuldigung, der Bereich ist 0 <= x <= 31, und 0 <= y <= 31. Korrekt im versuchen, dies ohne Schleifen zu tun und kann Conditionals nicht verwenden. – Silverfin