AGB  ·  Datenschutz  ·  Impressum  







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

Gestern liefs noch, heut Compilererror

Ein Thema von Jelly · begonnen am 27. Mär 2006 · letzter Beitrag vom 28. Mär 2006
Antwort Antwort
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 08:38
Vielleicht ist es auch nur ein Montagmorgensyndrom:

Folgender Code liefert mir schon beim Kompilieren den Fehler "Konstantenausdruck verletzt untere Grenzen". Aber warum ? Ich verschieb doch nur ein paar Bits nach links.

Delphi-Quellcode:
procedure TMainForm.Button2Click(Sender: TObject);
var
  a: byte;
begin
     a := 53 shl 4 ;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 08:45
Das Ergebnis ist 848 und jetzt über leg mal, ob das noch in den Datentyp Byte passt:
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 08:47
Zitat von Luckie:
Das Ergebnis ist 848 und jetzt über leg mal, ob das noch in den Datentyp Byte passt:
Hm... Luckie war schneller.

Wie hast es dann gestern geschft?

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 08:54
Wieso ist das Ergebnis 848, wenn ich doch nur mit byte arbeite... Laut Delphi 2006 Onlinehilfe, ist das Ergebnis vom gleichen Typ wie x (x shl y). Also Bits die über den linken Rand hinausgehen werden wieder rechts angehängt...

Spiel ich mit byte-Variablen rum:
Delphi-Quellcode:
var
  a, b, c: byte;
begin
     a := 53 ;
     b := 4 ;
     c := a shl b ;
     //a := (b shl 4) or ((c shr 2) and $0F);
end;
gibts nen Fehler "Fehler bei Bereichsprüfung".

Der Code stammt aus der DCPCrypt Sammlung von David Barton, und ist aus der Base64Encode Prozedur.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 08:59
Wieso das Ergebnis 848 ist:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a: Integer;
begin
     a := 53 shl 4;
     ShowMessage(IntToStr(a));
end;
Weil es Delphi sagt. Mach aus Byte mal Integer und guck es dir an. Du verschiebst alle Bytes um 4 Stellen nach links:
Code:
0000 0001 shl 4 = 0000 1000 => 1 -> 8
Und jetzt mach das mal mit 53.

Schalt mal die Bereichsprüfung aus, dann kommt es zu einem Überlauf, der eventeull gewollt sein könnte. Hab eich bei Source von Hagen auch schon mal gesehen:

Delphi-Quellcode:
procedure RC4Init(var RC4: TRC4Context; const Key: String);
var
  R,S,T,K: Byte;
  U,L: Integer;
begin
{$R-}
{$Q-}
  L := Length(Key);
  with RC4 do
  begin
    I := 0;
    J := 0;
    for S := 0 to 255 do D[S] := S;
    R := 0;
    U := 0;
    for S := 0 to 255 do
    begin
      if U < L then K := PByteArray(Key)[U] else K := 0;
      Inc(U);
      if U >= L then U := 0;

      Inc(R, D[S] + K);
      T := D[S];
      D[S] := D[R];
      D[R] := T;
    end;
  end;
end;
Mit R- wird die Bereichsprüfung ausgeschaltet, um den gewollten Überlauf bei Inc() zu ermöglichen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 09:01
Hallo,
Zitat von Jelly:
Also Bits die über den linken Rand hinausgehen werden wieder rechts angehängt...
Das hört sich mehr nach dem Befehl rol(Rotate left) an.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 09:02
Zitat von Jelly:
Wieso ist das Ergebnis 848, wenn ich doch nur mit byte arbeite... Laut Delphi 2006 Onlinehilfe, ist das Ergebnis vom gleichen Typ wie x (x shl y). Also Bits die über den linken Rand hinausgehen werden wieder rechts angehängt...
Ganz bestimmt nicht rechts wieder angehängt. Das wäre was ganz Neues ShL steht für SHIFT LEFT, nicht ROTATE LEFT. RoR und RoL gibt es nicht direkt (ohne Inline ASM).

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 09:11
Stimmt, mit dem Dranhängen hab ich mich vertan...

Aber wieso lief denn die Routine vorher? Werd mal versuchen mit Integern zu arbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 09:18
Zitat von Jelly:
Aber wieso lief denn die Routine vorher? Werd mal versuchen mit Integern zu arbeiten.
Sie kann nur gelaufen sein, wenn die Bereichsprüfung deaktiviert war.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Gestern liefs noch, heut Compilererror

  Alt 28. Mär 2006, 08:15
Sorry für die späte Rückmeldung... Also die Deaktivierung der Bereichsprüfung hat auch nix gebracht. Ich kann mir das Problem nicht erklären.
  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 11:28 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