Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Delphi 6] Shiftoperatoren - shl und shr

Empfohlene Antworten

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]

  • Autor

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 :(

  • Autor

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 :D

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.

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...).

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)

  • Autor

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 :D

Hab aber nur Cardinal als Datentyp verwendet (32 bit ohne Vorzeichen). Hat auch gleich funktioniert :) da arbeitet delphi und mein Kopf gleich :marine

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.