Maulwurf_der_Schlaue Geschrieben 2. März 2006 Teilen Geschrieben 2. März 2006 Hallo, hoffe ihr könnt mir helfen. ich habe den Wert 248 in einer Bytevariable names myByte. Jetzt möchte ich die ersten 4 bits alleine als Zahl haben. Also die 8 möchte ich. Wichtig ist das es mit den Schiftoperatoren gelöst werden soll. Ich mach also folgendes myByte := (myByte shl 4) shr 4 was im Binären (in meinem Kopf) so abläuft: 248 = 1111 1000 so jetzt shl 4 = 1000 0000 dann shr 4 = 0000 1000 = 8 was mach ich falsch ?? wenn das mein Programm macht kommt immer wieder 248 raus var myByte : Byte; ... myByte := 248; showMessage(IntToStr(myByte)); myByte := LeseBits(myByte); showMessage(IntToStr(myByte)); ... function TForm1.LeseBits(zahl: byte): byte; begin result := (zahl shl 4) shr 4; end; [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. März 2006 Teilen Geschrieben 2. März 2006 Lass dir doch mal die Zwischenergebnisse ausgeben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 2. März 2006 Autor Teilen Geschrieben 2. März 2006 Hallo, also ich hab mir die beiden Variablen in die liste der zu überwachenden Werte gelegt. mybyte := 248 (binär 1111 1000) // Funktionsaufruf // mybyte := mybyte shl 4 (128 - binär 1000 0000) mybyte := mybyte shr 4 (8 - binär 0000 1000) // Ende der Funktion // mybyte := 248 (wieder der ausgangswert ) oder was meintest du mit Zwischenergebnisse. Es verhält sich alles wie geplant nur leider ist es beim funktionende der alte wert wieder da Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 2. März 2006 Autor Teilen Geschrieben 2. März 2006 Hallo, wenn ich die shl und shr einzeln mache gehts. auf einmal gehts aber nicht, ich weiß allerdings auch nicht warum. So zweiter Fehler war ich hab in mybyte zurückübergeben. Jetzt hab ich noch eine Variable die das Funktionsergebnis aufnimmt. Jetzt gehts auf einmal. Danke jedenfalls für die HIlfe. Hatte wahrscheinlich bloß ein Brett vorm Kopf Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 2. März 2006 Teilen Geschrieben 2. März 2006 was im Binären (in meinem Kopf) so abläuft: 248 = 1111 1000 so jetzt shl 4 = 1000 0000 dann shr 4 = 0000 1000 = 8 was mach ich falsch ?? Vielleicht das, dass ein Integer in deinem Kopf nur 8bit hat (in Wirklichkeit aber 32)? EDIT: Auch wenn du als Typ Byte angibst, laut Delphi Hilfe verarbeitet shl Integer-Operanden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 3. März 2006 Autor Teilen Geschrieben 3. März 2006 Guten Morgen, hab ich anscheinend überlesen aber wieso funktioniert die "berechnung" denn dann? Es kommt ja wie erwartet 8 raus. Beim Rückgabewert wurde da dann wieder 248 draus. Jetzt da ich eine neue Variable verwende funktioniert das auch. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 3. März 2006 Teilen Geschrieben 3. März 2006 hab ich anscheinend überlesen aber wieso funktioniert die "berechnung" denn dann? Keine Ahnung, war nur eine Vermutung meinerseits... Jetzt da ich eine neue Variable verwende funktioniert das auch. Ich vermute mal, dass da irgendein Fehler im Code war (also die Variable nicht korrekt gesetzt oder nachher nochmal überschrieben...). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Khar Geschrieben 7. März 2006 Teilen Geschrieben 7. März 2006 Da sach ich nur muh du machst es dir ganz schön schwer HiByte = (Value and $F0) shr 4 LoByte = Value and $0F Soweit ich mich erinner kann gibt es auch die funktionen Hi() und Lo() in delphi...hab schon ewig kein delphi mehr geproggt(ich hoffe das präfix $ ist für hex) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 9. März 2006 Autor Teilen Geschrieben 9. März 2006 Guten Morgen, das mit dem $ stimmt soweit. High und Low glaub ich gibts auch. Da zur Zeit nichts ansteht hab ich mich mal an das Thema Steganographie herangewagt und bewältigt Hab aber nur Cardinal als Datentyp verwendet (32 bit ohne Vorzeichen). Hat auch gleich funktioniert da arbeitet delphi und mein Kopf gleich :marine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.