SHR SHL aber die Bits nicht wegfallemn lassen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

hamztata

Betreff: SHR SHL aber die Bits nicht wegfallemn lassen

BeitragDo, März 19, 2009 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Würde gern die bits sozusagen rotieren lassen.
Also das was verschoben wird nicht abschneiden und wegfallen lassen, sondern am anderen ende dranhängen.
ist das möglich?

Smily

BeitragDo, März 19, 2009 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
dazu müsstest du dir eine eigene Funktion erstellen.

Aber wie willst du das Umsetzen? An der anderen Seite ranhängen ist ja nur möglich, wenn definiert ist, wieviel bits es gibt. Wenn du bei einem INT ganz links ne 1 hinsetzt hast du dann ausserdem eine negative zahl.

Grüße,
Smily
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Silver_Knee

BeitragDo, März 19, 2009 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
if zahl mod 2=1 ;zahl durch 2 teilbar
  zahl=zahl shr 1
  zahl=zahl And (1 shl 31)
endif


Zum Beispiel. 1 shl 31 ist dabei die maximale Position: eine 1 an der 1. Stelle.

BladeRunner

Moderator

BeitragFr, März 20, 2009 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function ROL(var,shifts=1)   ;ROtate Left
   Local ergebnis
   Local carry
   For j= 1 To shifts
      For i = 31 To 0 Step -1
         shift = 2^i
         bit = (var And shift) Shr (i)
         If bit Then
            If i = 31 Then
               carry = True
            Else
               ergebnis = ergebnis Or 2^(i+1)
            EndIf
         EndIf
      Next
      If carry Then ergebnis = ergebnis Or 1
      carry = False
      var = ergebnis
      ergebnis=0
   Next
   Return var
End Function


Function ROR(var,shifts=1)   ;ROtate Right
   Local ergebnis
   Local carry
   For j= 1 To shifts
      For i = 0 To 31
         shift = 2^i
         bit = (var And shift) Shr (i)
         If bit Then
            If i = 0 Then
               carry = True
            Else
               ergebnis = ergebnis Or 2^(i-1)
            EndIf
         EndIf
      Next
      If carry Then ergebnis = ergebnis Or 2^31
      carry = False
      var = ergebnis
      ergebnis=0
   Next
   Return var
End Function


Print Bin(-20)
Print Bin(ROL(-20,2))
Print Bin(ROR(-20))
WaitKey()


Bitteschön, ROL und ROR
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

hamztata

BeitragFr, März 20, 2009 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
danke danke danke sehr, aber ich kau noch am signed SHR und SHL Nachbau.

BladeRunner

Moderator

BeitragFr, März 20, 2009 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Vorzeichenerhaltende Rotation ist genau dasselbe wie ROR und ROL, nur dass Du das Vorzeichenbit (2^31) nicht mitverschiebst sondern einfach beibehältst.
Sollte mit meiner Vorlage binnen 2 Minuten zu basteln sein.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

hamztata

BeitragFr, März 20, 2009 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die nette antwort.
ich werds morgen mal versuchen, ich steig da nämlich heut nicht mehr durch.
im anderen thread hab ichs ja theoretisch verstanden wie es funktionieren muss, nur an der umsetzung hapert es.
naja ich werd mich erstmal hinlegen, morgen ist auch noch ein tag.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group