AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

shl mit 8 Bit

Ein Thema von BergLoewe · begonnen am 24. Aug 2022 · letzter Beitrag vom 24. Aug 2022
Antwort Antwort
BergLoewe

Registriert seit: 20. Nov 2005
37 Beiträge
 
Delphi 11 Alexandria
 
#1

shl mit 8 Bit

  Alt 24. Aug 2022, 11:49
Delphi-Version: 5
Hallo,


ich muß für eine Prüfsumme Bits in einem einzelnen Byte verschieben. Theoretisch mit shl weniger das Problem. Praktisch kommt es aber irgendwie zu einem Überlauffehler. Denn wenn das oberste Bit 7 eine 1 ist, bringt er mir einen Rangefehler. Da will er das Bit wahrscheinlich nicht in den Papierkorb fallen lassen und weiß nicht wohin.
Wie bring ich Delphi denn aber genau dazu, dass das oberste Bit beim Linksschieben verschwindet?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: shl mit 8 Bit

  Alt 24. Aug 2022, 12:04
Du könntest für die entsprechende Routine RangeChecks abschalten, da es sich ja um gewollte Überläufe handelt, siehe auch https://www.delphipraxis.net/140406-...auslesbar.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#3

AW: shl mit 8 Bit

  Alt 24. Aug 2022, 12:24
Eine weiter Möglicheit wäre es, das oberste bit vor dem shl zu entfernen.
B := (B and $7F) shl 1;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: shl mit 8 Bit

  Alt 24. Aug 2022, 13:31
Nach dem Shift auf Byte casten, wäre wohl auch möglich.


Du kannst dir ja mal im Assembler ansehn, was bei deiner Rechnung generiert wurde.


Enteder wird da im Integer (ganzes Register) geshiftet und danach passt der Wert nicht mehr in die Byte-Variable.

Oder die RangeCheck-Routine prüft auch bei binären Operationen die Überlauf-Bits.
Hätte aber gedacht, das würde nur bei mathematischen Operationen gemacht (nicht bei Binären).
$2B or not $2B

Geändert von himitsu (24. Aug 2022 um 13:53 Uhr)
  Mit Zitat antworten Zitat
BergLoewe

Registriert seit: 20. Nov 2005
37 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: shl mit 8 Bit

  Alt 24. Aug 2022, 18:18
Moin,

ich steh gerade auf dem Schlauch. Ich möchte einen Compilerschalter (Rangechecks) temporär umstellen, diesen aber später wieder in den alten Zustand versetzen. Dazu müsste ich ja den alten Zustand erst einmal erfragen. Geht das überhaupt und wenn ja, wie? Ich meinte das in der Art
Delphi-Quellcode:
{$IF RANGECHECKS}
  {$DEFINE WAR_AN}
    {$RANGECHECKS OFF}
    //Hier der entsprechende Code
  {$IFDEF WAR_AN}
    {$RANGECHECKS ON}
  {$ENDIF}
Besten Dank, das hat mich gehelft!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz