Ich bin auf der Suche nach einer schnellen Möglichkeit, eine Methode zum Zurückgeben einer Bitmaske basierend auf einer Nummer einzurichten. Grundsätzlich müssen 4 Ein-Bit-Eingaben vor der Nummer ausgegeben werden. Hier ist eine gute Idee von dem, was ich meine:Schnelle bitweise Frage in C++
foo (1); // gibt 0x000F foo (2) zurück; // gibt 0x00FF foo (3) zurück; // gibt 0x0FFF foo (4) zurück; // gibt 0xFFFF zurück
Ich könnte nur eine große switch-Anweisung verwenden, aber ich weiß nicht, wie breit der Eingangstyp im Voraus ist. (Dies ist eine Template-Funktion)
Hier war das erste, was ich versucht:
template <typename T> T foo(unsigned short length)
{
T result = 0xF;
for (unsigned short idx = length; idx > 0; idx--)
{
result = (result << 4 | 0xF);
}
return result;
}
aber es verbringt viel Zeit auf die maintenence tun for-Schleife. Irgendwelche clevere Möglichkeiten, das zu tun, an die ich nicht gedacht habe?
billy3
Nach ungefähr 10 Minuten, die herausfinden, warum es funktioniert, tritt A **! Vielen Dank! –
@Charles Bailey, es dauerte länger als 10 Minuten, da meine Vorlagenprogrammierung ziemlich rostig ist und ich muss zugeben, dass es eine sehr schöne und elegante Lösung ist. Der Schlüssel ist zu erkennen, dass T (1) in einen Wert von 1 für den Typ umgewandelt wird, dann wird der eine so verschoben, dass er im nächsten Nibble ist, dann subtrahiere 1, um den 0xf zu erhalten. Ein Beispiel für unsigned short wäre also 0x0001, dann wäre es 0x0010, dann subtrahiere eins, um 0x000f zu erhalten. –