| |
Fortgeschrittene ProgrammierungBoolean - Warum 2 Bytes? | | | Autor: danieljena | Datum: 11.07.16 17:13 |
| Hallo Leute,
warum verbraucht der Datentype Boolean in VB6/VBA zwei Byte und nicht nur eins?
In .net wurde die Speichergröße ja auf eins gesetzt.
mfg
danieljena | |
Re: Boolean - Warum 2 Bytes? | | | Autor: Blackbox | Datum: 12.07.16 17:52 |
| Hallo,
eigentlich kennt VB nur einen einzigen Datentyp - bzw. eine einzige Datenstruktur und das ist der Variant. Alle Daten werden intern damit verarbeitet. Nach außen hin werden die Variants dann eben in
die entsprechenden "gewünschten" Typen übersetzt, das passiert beim Schreiben in den Speicher. Für den
Wunschtypen Boolean nimmt VB einfach eine Single und die hat 16 Bit, somit zwei Bytes. Geschultet ist das dem Umstand dass Boolean True den Wert -1 hat und Boolean False den Wert 0. Die 16 Bit sind der Abwärtskompatibilität zu älteren VB-Versionen geschuldet. | |
Re: Boolean - Warum 2 Bytes? | | | Autor: danieljena | Datum: 13.07.16 11:47 |
| Stimmt Single ist ein 32bit-Typ und hat somit 4B.
@Blackbox
Erklärung mit Single wäre also "falsch".
Könnte es auch sein, dass VB Integer (2B) als "Grundtyp" nutzt?
mfg
danieljena | |
Re: Boolean - Warum 2 Bytes? | | | Autor: Blackbox | Datum: 12.08.16 20:09 |
| Hallo,
die Erklärung ist richtig. VB unterstützt als allgemeine
nummerische Variable das Single. Die ist 4 Bytes breit.
Der Text ist richtig gedacht, aber falsch geschrieben ...
Tatsächlich unterstüzt VB in Wirklichkeit nur die Variants.
Der Header dieser Struktur ist vier Word breit. Eines dieser
Words ist der Datentyp, den VB später repräsentieren soll,
das ist der Variant-VT-Member. Der ist ein Word breit. Mehr
braucht VB intern nicht um den Boolean zu zaubern.
-> Len = 2 Bytes -> WORD 16 Bits | DWORD 32 Bits
Für uns Programmierer steht also an der Speicherstelle für das
Boolean eine Struktur namens VARIANT und das erste Word davon
steht auf Variant_BOOL. Der Header umfasst 2 DWORDS. Drei Worte
davon sind unbenützt. Speicherbeginn der Struktur + 64 Bytes ergeben
dann den Speicherwert. Der kann TRUE sein, oder TRUE AND 1,
letzteres wäre FALSE.
Ich denke das jetzt korrekt beantwortet zu haben. Dass VB die
wirkliche Länge eines Datentyps anzeigt ist somit eine Illusion,
bzw. interne Berechnung was VB-Runtime daraus macht.
Intern misst VB mit Single im nummerischen Bereich und mit
BSTR im Textbereich. Jede Type wird ausdrücklich über Variants
in die entsprechenden Konverter übermittelt. -> Siehe OLE2.DLL
Aus genau diesem Grund kann VB eine Boolean niemals als weniger
als 2 Bytes darstellen.
Beitrag wurde zuletzt am 12.08.16 um 20:29:05 editiert. | |
Re: Boolean - Warum 2 Bytes? | | | Autor: Manfred X | Datum: 16.08.16 10:02 |
| Hallo!
Die Datentypen Single (4 Byte) und Double (8 Byte)
sind im IEEE-Format definiert
(effiziente Gleitkomma-Operationen).
Sie sind auch in VB6 entsprechend implementiert.
Untertypen von "VARIANT" werden in VB6 eingesetzt,
wenn bei der Deklaration einer Variablen kein Datentyp angegeben
worden ist.
Der Datentyp "Decimal" kann in VB6 nur als Variant-Untertyp verwendet
werden (erstellt durch die "CDEC"-Konvertierungsfunktion).
Ganzzahl-Variablen (Integer, Long) oder Gleitkomma-Variablen
(Single, Double, Currency) sind effizienter als die entsprechenden
VARIANT-Untertypen (weniger Speicherplatz). | |
Re: Boolean - Warum 2 Bytes? | | | Autor: VB3-Guru | Datum: 10.09.16 12:40 |
| Theoretisch braucht ein Boolean nur ein Byte. Aber jede Variable braucht einen Speicherort, also eine Adresse im RAM. D.h. eine Variable hat immer einen Zeiger (den kann man übrigens per Vartptr() ermitteln).
Speicheradressen müssen immer durch 2 teilbar sein. D.h. man kann Variablen nur an gerade Speicheradressen ablegen. Daher "verbraucht" ein Boolean mindestens 2 Byte.
Tatsächlich ist aus diesem Grund ein Boolean einfach ein modifizierter 16-Bit-Integer, bei dem im Fall von True alle Bits gesetzt sind und im Fall von False alle Bits 0 sind. Das ist eine Eigenheit von VB. In anderen Sprachen ist ein Boolean entweder 1 oder 0.
Das was Blackbox unten geschrieben hat bezieht sich nur auf vbScript. VBC kennt sebstverständlich verschiedene Variablen-Typen, also vom Boolean über Integer und Long zum Single bis zum Double und auch den Variant. vbScript kennt nur den Variant.
lg, VB3-Guru | |
Re: Boolean - Warum 2 Bytes? | | | Autor: VB3-Guru | Datum: 10.09.16 17:35 |
| Manfred X schrieb:
Zitat: | | Hallo!
[I]Theoretisch braucht ein Boolean nur ein Byte.[/I]
Nö.
Es
genügt ein Bit - verwendet im Paket. | |
Das war aber nicht die Antwort auf die ursprüngliche Frage. Die Frage war, warum belegt ein Boolean 2 Byte? Das wurde bisher unzureichend beantwortet.
Wenn du einzelne Bits in einer Integer-Variablen setzt oder liest, dann hat das nichts mit einem VB-Booelan zu tun, der dir True oder False zurückliefert.
lg, VB3-Guru | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|