AGB  ·  Datenschutz  ·  Impressum  







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

Einem Set einen Enum zuweisen?

Ein Thema von Glados · begonnen am 27. Aug 2017 · letzter Beitrag vom 28. Aug 2017
 
Benutzerbild von himitsu
himitsu

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

AW: Einem Set einen Enum zuweisen?

  Alt 28. Aug 2017, 09:45
Das mit den 0-255 hast du falsch verstanden.

1-Byte wäre es, wenn es sich auf ENUMs bezieht, aber die können bis 64 Bit groß werden (0-255=Byte, 256-65.535=Word, ...=LargeWord und auch abhängig von {$MinEnumSize x} ), bei Verwendung des IN-Operators kann man davon aber nur 0-255 abfragen.

Der Compiler nutzt für SETs aber beim IN einen Assemblerbefehl, der nur eine Bit-Adressierung mit einem Byte unterstützt, weswegen SETs auf 256 Bits (Werte/ENUMs) unterstützt werden, also bis zu 32 Bytes.

Das ist auch der Grund, warum man bei WideChar kein IN verwenden kann, obwohl man das im Compiler auch hätte bugfixen können. (selber eine Prüfung implementieren, bzw. bei der Prüfung das unterde Byte des Index über den schon verwendeten ASM-Befehl und die höheren Byte als Speicheroffest i*32, vorallem da dieser ASM-Befehl nicht gerade schnell ist und man das mit einem ByteOffest+Shift+AND hätte womöglich schneller prüfen können)


Code:
Unit6.pas.29: Exclude(A, 'b');
004AB648 8065E4FB        and byte ptr [ebp-$1c],$fb

Unit6.pas.30: Include(A, 'b');
004AB64C 804DE404         or byte ptr [ebp-$1c],$04

Unit6.pas.31: if 'b' in a then ;
004AB650 F645E404         test byte ptr [ebp-$1c],$04
004AB654 7407             jz $004AB656
https://en.wikipedia.org/wiki/TEST_(x86_instruction)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (28. Aug 2017 um 10:15 Uhr)
  Mit Zitat antworten Zitat
 


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