bool
-
Mis2com schrieb:
Ist bool nicht eigentlich == int?
Nein, wie kommst du darauf?
-
Mis2com schrieb:
Ist bool nicht eigentlich == int?
Wenn nicht, wie definiert der Standard bool?was meinst du?
bool ist einfach ein Typ der 2 zustände haben kann: true oder false.
-
Dieser Typ muss aber eine Größe haben und diese Größe ist nicht bit.
Gut, BOOL ist 4 Byte, aber bool ist standardmäßig 2 Byte, jedenfalls unter MSVC6.0
-
Irgendeine Größe wird er schon haben, klar. Deshalb wird er noch lange nicht zum int.
-
Ich meinte natürlich auch nicht, dass er = int ist, sondern die gleiche Größe hat.
Aber auch das stimmt nicht, er hat die Größe eines shorts, das jedenfalls in VC6.0.MfG Eisflamme
-
Wieso unterhalten wir uns hier eigentlich über die größe eines Typs? Dank sizeof() braucht man sich diese Frage nicht stellen. Wie der Compiler nun optimiert soll seine Sorge sein.
Selbst wenn man einen Algorithmus schreibt und einem es auf die Geschwindigkeit ankommt, wird es wohl egal sein, da der Compiler dann für bool schon das richtige machen wird. (wozu gibt es sonst die compileroption -Ox)
-
Auf der Suche nach Klarheit wird es für mich eher verwirrender: Offenbar gibt es (in MSVC++ und BC++Builder) sowohl bool als auch BOOL, dazu noch boolean und BOOLEAN. Frage mich, inwieweit die kompatibel, also Umwandlungen vom einen in den anderen Typ "verlustfrei" möglich sind ...
-
George3D schrieb:
Auf der Suche nach Klarheit wird es für mich eher verwirrender: Offenbar gibt es (in MSVC++ und BC++Builder) sowohl bool als auch BOOL, dazu noch boolean und BOOLEAN. Frage mich, inwieweit die kompatibel, also Umwandlungen vom einen in den anderen Typ "verlustfrei" möglich sind ...
Das sind nur typedefs auf unsigned int oä die es IIRC schon länger gibt als bool bzw. die ursprünglich für C ohne bools gedacht waren.
edit: Mittlerweile hat C bools, allerdings gab es die noch nicht als die WinAPI konzipiert wurde.
-
Wie schon gesagt wurde: es alles im prinzip das gleiche. wegen datenverlust brauchst du dir also keine gedanken zu machen. der standard definiert den booleanischen datentyp als 'bool', der einen der werte 'true' und 'false' speichern kann. nutze ihn, und du stehst auf der sicheren seite.
(texte zwischen '' sind in diesem post case-sensitiv)
-
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.