Binary Shift mit Wrap Around
Übersicht

DreamoraBetreff: Binary Shift mit Wrap Around |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Standardmässig beherrscht BlitzMax ja nur das einfache verschieben der Bits (shl, shr), sowie für den fall nach rechts noch das verschieben und auffüllen (sar).
Häufig wäre es jedoch notwendig, dass ein Bit, welches man auf der einen Seite rausschiebt, auf der anderen wieder reinkommt. Also zb: 1100 -> 0110 -> 0011 -> 1001 -> 1100 Deswegen hier ein kleines Beispiel und die 2 dafür notwendigen Funktionen, in welchen ihr selbst angeben könnt, wie lange eure Bitfolge ist. Obige hätte zb eine Bitlength von 4 (sonst ginge das ganze bis rauf auf die Maximallänge des Zahlentyps. Mit den Funktionen unten kann man prinzipiell auf Int bleiben, was am schnellsten ist, da die Libraries auf Int und Float optimiert sind) Code: [AUSKLAPPEN] b=%1010
For i=1 To 33 Print Bin(b) b=whr(b,4) Next b=%1010 For i=1 To 33 Print Bin(b) b=whl(b,4) Next Function WHR:Int(number:Int, bitlength:Int=32) If number & 1 Return ( (number Shr 1) | (%1 Shl (bitlength-1))) Else Return (number Shr 1) EndIf End Function Function WHL:Int(number:Int, bitlength:Int=32) If number & (1 Shl (bitlength-1)) Return ( ((number Shl 1) ~ (1 Shl (bitlength)) )| 1 ) Else Return (number Shl 1) EndIf End Function |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group