Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » warum bool benutzen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.08.2006, 22:24 Uhr
Lensflare



Hallo.

korrigiert mich bitte wenn ich falsch liege.

speicher wird immer byteweise reserviert/freigegeben.

der typ bool hat nur zwei zustände und obwohl eigentlich ein bit dafür reichen würde wird
für ein bool trotzdem ein byte an speicher "verschwendet".

wieso benutzt man also bool, wenn man stattdesen genauso gut auch char benutzen könnte?

macht der compiler vielleicht irgendwelche optimierungen und packt mehrere bools in eine speicherzelle?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.08.2006, 22:42 Uhr
Spacelord
Hoffnungsloser Fall


Schau dir mal vector<bool> an.

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.08.2006, 08:41 Uhr
ao

(Operator)



Zitat von Lensflare:
wieso benutzt man also bool, wenn man stattdesen genauso gut auch char benutzen könnte?

Weil durch sog. "problemangepasste Datentypen" der Sourcecode besser verständlich und damit fehlersicherer wird.

Zitat:
macht der compiler vielleicht irgendwelche optimierungen und packt mehrere bools in eine speicherzelle?

Nein. Das würde zwar Speicherplatz sparen, aber dafür Rechenzeit vergeuden, weil der Speicher nur byte-adressierbar ist. D.h. zum Schreiben einer 1 an irgendeine Bitstelle muss das ganze Byte in ein Register geholt, dort die 1 an der richtigen Stelle einmaskiert und das veränderte Byte zurückgeschrieben werden. Speicherplatz ist billig, es gibt keinen Grund, sich irgendwelche Zwänge aufzuerlegen, um ein paar Bytes einzusparen.

Auf Mikrocontroller-Plattformen sieht die Sache ganz anders aus, die haben oft nur ein paar kB oder ein paar hundert Bytes RAM, und da muss man schon knausern. Dafür gibts dann aber oft einen bit-adressierbaren Speicherbereich, d.h. man kann Variablen definieren und benutzen, die tatsächlich nur ein Bit Speicher belegen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.08.2006, 13:40 Uhr
Lensflare



ok, dann kann ich also getrost immer char statt bool verwenden, falls ich unsicher bin ob 2 zustände reichen ^^

danke.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.08.2006, 14:40 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Wenn du knausern und selbst keine Bitmasken benutzen willst dann kannst du z.B. sowas machen:

C++:
#include <stdio.h>

struct test
{
    unsigned char Stauts1:1; //1 Bit breit
    unsigned char Status2:1; //1 Bit breit
    unsigned char Status3:2; //2 Bit breit
    //Restliche 4 Bits ungenutzt
}t;

int main()
{
    t.Stauts1 = 1;
    t.Status2 = 0;
    t.Status3 = 3;

    if (t.Stauts1)
        printf ("Status 1 gesetzt\n");
    if (!t.Status2)
        printf ("Status 2 nicht gesetzt\n");

    if (t.Status3)
        printf ("Status 3 gesetzt auf %i",t.Status3);

    return 0;
}




Es wird aber trotzdem Byteweise gespeichert, so das t 1 Byte groß ist und es ist wie ao bereits sagte eher für Microcontroler gedacht weil es dir auf dem PC effektiv nichts bringt.

Dieser Post wurde am 21.08.2006 um 16:43 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.08.2006, 15:59 Uhr
Th



@Guybrush Threepwood: Ich wußte gar nicht, daß ein Byte auf deinem Rechner 9 Bits hat (4+5)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.08.2006, 16:44 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ich weiß gar nicht was du meinst :P

Nee habs angepasst, danke für den Hinweis
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.08.2006, 13:09 Uhr
Lensflare



ich sehe sowas zum ersten mal

gut zu wissen, danke.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: