Doppelte Binärzahlen verdoppeln

8

Wie verdoppele ich eine Anzahl von Binärziffern in einer Ganzzahl? Wenn beispielsweise bin (x)="1001" dann muss bin (y) "11000011" sein. Gibt es einen intelligenten und schnellen Algorithmus?

UPDATE: Hier ist eine elegante Lösung:

%Vor%

wobei X bin (int_x) [2:]

ist

Ich interessiere mich jedoch für einen schnelleren Weg und für die Ganzzahlen jeder Größe. Vielleicht sollte eine arithmetische Transformation helfen.

    
psihodelia 28.05.2010, 12:23
quelle

7 Antworten

20

Hier ist eine Möglichkeit, die einigermaßen schnell sein sollte: Konvertiere deine Zahl in eine binäre Zeichenkette und interpretiere das Ergebnis dann in Basis 4. Um sicherzustellen, dass alle 1 richtig verdoppelt sind, multipliziere das Ergebnis mit 3.

%Vor%     
Mark Dickinson 28.05.2010, 13:11
quelle
16

(Referenz Ссылка ):

Wenn Ihre Nummer unter 256 liegt, können Sie

verwenden %Vor%

und wenn es unter 65536 liegt,

%Vor%

Vergleich mit anderen Lösungen (die Funktion muss eine ganze Zahl annehmen und eine ganze Zahl für einen fairen Vergleich zurückgeben):

%Vor%

Benchmark-Quellcode finden Sie in Ссылка .

    
kennytm 28.05.2010 13:34
quelle
11

Die einfache Lösung, die nur ganzzahlige Arithmetik verwendet, wäre:

%Vor%     
Peter Milley 28.05.2010 12:35
quelle
4

any_number - int

str (n) - erzeugt String aus int.

str :: replace (Muster, ersetzter_Wert) - ersetzt alle Muster in der Zeichenkette durch ersetzter_Wert.

int (str) - macht int von string.

%Vor%     
Max 28.05.2010 12:30
quelle
1
%Vor%     
grokus 28.05.2010 13:14
quelle
0
%Vor%     
Jim Tshr 28.05.2010 12:47
quelle
0
%Vor%

sollte es tun.

    
phimuemue 28.05.2010 12:58
quelle

Tags und Links