Setze Bit X einer Ganzzahl auf Bit Y einer anderen Ganzzahl ohne Verzweigung?

7

Kann die copy_bit Funktion unterhalb von out[out_bit] = in[in_bit] vereinfacht werden? (d. h. keine if -Anweisung verwenden)

%Vor%

Update: Nur um klar zu sein, das ist keine Hausaufgabe oder ein XY-Problem, wo% ce_de% die Frage beantwortet.

    
x-x 11.08.2014, 05:24
quelle

3 Antworten

9

Sie können es so machen:

%Vor%

(Verschieben Sie beide Werte so, dass die erforderlichen Bits mit & gt; & gt; an der niedrigstwertigen Position liegen, wählen Sie mit & nur das untere Bit des Ergebnisses der Operation ^ und verschieben Sie dann das Ergebnis in die Position einer anderen Null -Wert auf ^ mit dem ursprünglichen Ziel. Das Ergebnis entspricht dem Kopieren des Bits in_Bit von in in Bit out_Bit von out.)

    
Roee Gavirel 11.08.2014, 05:39
quelle
6

Eine Möglichkeit, dies in einer Zeile zu tun, wäre, das Ausgangsbit zuerst auf Null zurückzusetzen und dann mit jedem Bit, das die in -Nummer hat, ODER zu verknüpfen:

%Vor%     
Ishamael 11.08.2014 05:45
quelle
4

Versuchen Sie Folgendes:

%Vor%

Erläuterung:

  • (out & ~(1 << out_bit)) belasse die Bits von out , die nicht interessant sind.
  • (in & (1 << in_bit) wähle das interessante in
  • aus
  • (((in & (1 << in_bit)) >> in_bit) << out_bit) positioniert das Bit an der richtigen Position.
NetVipeC 11.08.2014 05:44
quelle