bool
-
Weil bool ja nur die Werte true und false annehmen kann, liegt die Frage nahe:
Ist bool in der Regel (bei allen C++-Compilern?) als kleinstmöglicher Typ wie z.B. byte oder ist boll als int vereinbart? (Wobei es da ja je nach Compiler auch int=long bzw. int=short geben kann.)
-
Also bool ist bool und kein int oder char. Da die kleinste adressierbare Einheit ein byte ist, liegt es nahe, dass bool ein byte belegt. um sicher zugehen mach mal sizeof(bool).
Bei mir kommt 1 raus.
-
@_DennisB_, sicher?
Aus sicht moderner CPUs wäre aber long viel geeigneter.
Heutige 32-Bit Prozessoren können mir 32-Bit Werten
schneller rechnen als mit byte- oder short-Werten.
Warum sollte ein Compiler dann nicht bool zu long
optimieren? Bin mir dabei aber auch nicht sicher.Bye Peter.
-
___Peter schrieb:
Aus sicht moderner CPUs wäre aber long viel geeigneter.
Also wenn ich einen Compiler schreiben würde, dann würde ich bool schon als char implementieren - denn padden (auf 32Bit) kann man immer - aber oft kann man 4 bools zu einem 'int' zusammenfassen und so den Prozessor besser beliefern.
-
Ist bool nicht eigentlich == int?
Wenn nicht, wie definiert der Standard 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.