bool
-
Kleine Korrektur: auf 32-Bit-Rechnern sind Byte-Zugriffe etwa genauso schnell wie (bis schneller als) DWORD-Zugriffe. WORD's werden am ehesten bestraft, und ganz schlimm ist das Mischen. Für bool würde sich ein byte also anbieten.
@Mis2com:
sizeof(bool) ist auf meinem VC6 == 1, sizeof(short) == 2.btw. laut (meines verständnisses des) standard "mißt" sizeof() die Größe in chars, nicht in bytes.
unter Win32/x86/VC6 ist VARIANT_BOOL ist ein short (mit -1==VARIANT_TRUE), und BOOL ein int.
-
peterchen schrieb:
btw. laut (meines verständnisses des) standard "mißt" sizeof() die Größe in chars, nicht in bytes.
Nur das 1 char == 1 byte ist... ansonsten korrekt.
-
nicht zwingend - "char" ist durch das "Execution character set" definiert, "byte" als kleinste direkt adressierbare Einheit.
Also: ein C++ - Compiler für ein OS auf zich-bit-Maschine, die als kleinste Einheit 17 bit adressieren kännte, aber einen 32-Bit-Unicode-Zeichensatz verwendet, 32 bit für char verwenden, die "kleinste Adressierbare Einheit" wäre euin compiler-spezifischer Datentyp (oder ein short, sofern der kleiner als ein char sein darf)
Aber wie gesagt, das ist mein Verständnis des Standards. zumindest ist in jedem Fall sizeof(char) == 1 garantiert.
-
char ist 1Byte, jedoch ist die Bitzahl dieses bytes plattformäbhängig ne Plattform
mit 10Bit pro byte wäre char 1byte, jeodch 10Bit groß.
-
Soll char nicht "Ein Zeichen des Zeichensatzes der Ausführungsumgebung" halten können? (Bin mir da nicht sicher... und hab keinen Standard da.) und das wäre auf einem 10Bit-Unicode-OS auch mindestens 2 Byte.
-
peterchen schrieb:
Soll char nicht "Ein Zeichen des Zeichensatzes der Ausführungsumgebung" halten können?
Ja und?
C++ definiert char als ein byte. Da kannst du nix rum diskutieren.
-
peterchen schrieb:
nicht zwingend - "char" ist durch das "Execution character set" definiert, "byte" als kleinste direkt adressierbare Einheit.
Also: ein C++ - Compiler für ein OS auf zich-bit-Maschine, die als kleinste Einheit 17 bit adressieren kännte, aber einen 32-Bit-Unicode-Zeichensatz verwendet, 32 bit für char verwenden, die "kleinste Adressierbare Einheit" wäre euin compiler-spezifischer Datentyp (oder ein short, sofern der kleiner als ein char sein darf)
Darf aber nicht. -- Du sollst die Norm nicht interpretieren, Du sollst sie lesen, und da steht ziemlich eindeutig in 1.7#1, daß man in einem Byte jedes Dingsbums aus dem basic execution character set speichern kann, außerdem hat es eine Adresse. Sizeof 5.3.3#1 misst die Anzahl der Bytes(!), wobei sizeof(char) immer eins wird.
-
Hier noch ein netter Artikel, der die meisten Fragen über 'bool' beantworten sollte:
http://gotw.ca/gotw/026.htmgruß,
walker
-
@Daniel: danke
Der Standard definiert also praktisch Byte = Char, wieviele Bit auch immer.Ich kenn halt Byte aus der Assembler-Programmierung als "kleinste direkt adressierbare Einheit, wieviele Bit auch immer"
-
Zur Auflockerung oder Verwirrung (?) hier ein paar Infos (jedenfalls laut Microsoft/Borland-Hilfe):
bool = C++ keyword, meist definiert als int (oder auch byte)
BOOL = typedef int BOOL
boolean = typedef unsigned char boolean
BOOLEAN = typedef BYTE BOOLEAN (typedef unsigned char BYTE)
-
George3D: Und was bringt dir die Auflistung von zu 75% nicht im Standard vertretenen Typen? Ich denke die Diskussion war längst geklärt.
-
75% nicht im Standard vertreten?
Mehr noch, denn er schreibt in Klammern bei bool byte und das ist kein C++ Buildin Type
Hm, naja, wobei ein Byte ja gleich ein char ist, ok, dann nur 75 %