![]() |
Delphi-Version: 5
shl mit 8 Bit
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? |
AW: shl mit 8 Bit
Du könntest für die entsprechende Routine RangeChecks abschalten, da es sich ja um gewollte Überläufe handelt, siehe auch
![]() |
AW: shl mit 8 Bit
Eine weiter Möglicheit wäre es, das oberste bit vor dem shl zu entfernen.
Delphi-Quellcode:
B := (B and $7F) shl 1;
|
AW: shl mit 8 Bit
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). |
AW: shl mit 8 Bit
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz