vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Boolean - 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Boolean - Warum 2 Bytes? 
Autor: Zardoz
Datum: 13.07.16 00:23

Blackbox schrieb:
Zitat:

Für den
Wunschtypen Boolean nimmt VB einfach eine Single und die hat
16 Bit, somit zwei Bytes.


Eine Variable vom Typ Single hat 32 Bit und somit 4 Bytes.

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Boolean - Warum 2 Bytes? 
Autor: Manfred X
Datum: 10.09.16 15:35

Hallo!

[I]Theoretisch braucht ein Boolean nur ein Byte.[/I]

Nö.
Es genügt ein Bit - verwendet im Paket.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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