CBit
-
Ich möchte mir eine Klasse CBit bauen, das genau 1 Bit kapselt. Nur wie Speicher ich das Bit ab? Das kleinste was ich gefunden hab, war der Typ char mit 8-bit
-
Nimm einfach einen Short und speichern nur 1 oder 0 drin.
Ich glaube etwas kleineres als Char gibt es nicht.
-
es gibt bool
-
Wobei bool im Speicher auch 8 Bit hat (aber nur die Werte 1 (true) und 0 (false) annehmen kann). Einen Datentyp der wirklich nur 1 Bit belegt ist rein technisch auf heutigen Computern nicht möglich.
-
Ja gut, ausser man bastelt sich sowas hier:
struct bit { unsigned value:1; };
Aber das ist humbug und ich bezweifle dass man dadurch irgendeinen Vorteil hat. 1 Bit wird der sicher nicht nur belegen. Dann könnte man ihn garnicht adressieren.
-
Ich hab in der Schule mal gelernt die kleinste Speichereinheit ist ein Byte und die klienste Informationseinheit ist ein Bot, auch wenn das schon ein paar Jahre her ist binich mir zielmich sicher das das zu den Sachen gehört die sich noch nicht geändert haben.
Die bit struct wird dir denkich auch 1 byte geben wenn du sizeof machst... das einzige wäre
vector<bool> blubb;
Der nimmt immer nur soviele Bytes wie unbedingt nötig, also für alle 8 bools eins, aber das zahlt sich auch erst aus wenn man mehr als ein bit braucht.
-
Original erstellt von dreaddy:
Die bit struct wird dir denkich auch 1 byte geben wenn du sizeof machst...Hab ich doch gesagt, dass das nicht möglich ist einen 1 Bit Datentyp zu erstellen
Original erstellt von dreaddy:
Der nimmt immer nur soviele Bytes wie unbedingt nötig, also für alle 8 bools einsDu verwechselst vector mit bitset. Bin mir aber nicht sicher wie Bitset intern aufgebaut ist...
EDIT: @dreaddy: Btw, was ist denn ein Bot?
[ Dieser Beitrag wurde am 15.05.2003 um 16:50 Uhr von MaSTaH editiert. ]
-
vector<bool> ist ein Spezialfall
-
Also im Standard steht da nix zu. Habs mal ausprobiert:
vector<bool> vec; // ... vec.push_back(0); vec.push_back(1); vec.push_back(0); vec.push_back(1); vec.push_back(0); vec.push_back(1); vec.push_back(0); vec.push_back(1); size_t size = vec.capacity();
Und siehe da, size war 8 :p
-
-
Hast Recht, habs mal mit 9 Einträgen versucht und da war size 16. Also gibt capacity Bits (bzw. reservierte Einträge) zurück. *alleszurücknehm*
-
Also im Standard steht da nix zu.
Huh? Welche Ausgabe hast du?
Ich sehe zu vector<bool> in 23.2.5 eine ganze Menge
Unter anderem:
reference is a class that simulates the behavior of a single bit in vector<bool>.
Das ändert freilich nichts daran, dass in C und C++ 1 Byte die kleinste Einheit ist.
-
Original erstellt von HumeSikkins:
Huh? Welche Ausgabe hast du?Uuuups, hast ja Recht. Muss ich wohl überlesen haben.
Hab den C++ ANSI Draft vom 6.12.96. Gibts denn nen neueren?
-
Hab den C++ ANSI Draft vom 6.12.96. Gibts denn nen neueren?
Es kann nur einen geben
Ernsthaft. Es gibt nur einen C++-Standard. Der hört auf den Namen ISO/IEC 14882 und die erste Ausgabe ist vom 01.09.1998. Bis es dann zu einem neuen Standard kommt gibt es Technical Corrigendums sowie Defect Reports.
Vor dem offiziellen Standard gab es sogenannte Draft Standards. Den Final Draft gibt es z.B. hier:
http://www.kuzbass.ru/docs/isocpp/
-
Es kann nur einen geben
Ich meinte ja auch neuere Draft-Version irgendwo zum DL.
Thx, ich hatte nur die Draft-Version von c-plusplus.net. Ist aber schon was älter. Der richtige ist doch AFAIK kostenpflichtig
.
[ Dieser Beitrag wurde am 15.05.2003 um 17:51 Uhr von MaSTaH editiert. ]
-
Original erstellt von MaSTaH:
**Der richtige ist doch AFAIK kostenpflichtig.
**und das sogar ziemlich saftig: http://www.iso.ch/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=25845&ICS1=35&ICS2=60&ICS3=
-
Hallo,
kaufst du pdf-Version bei der ANSI, kostet dich nur 18$
http://www.techstreet.com/cgi-bin/detail?product_id=49964
-
Das wäre cool
. Dann muss ich aber erst meinen Daddy überreden, dass der mir seine Kreditkarte leiht. Ne normale Sparkassen-Karte nehmen die sicher nicht an wenn man Online über das Inet bestellt.