char immer 1 Byte? bool immer 1 Byte?
-
in meinem Skript steht, dass ein char und bool immer ein Byte groß sind? ich glaube der Dozent hat hier einen Fehler gemacht und ich möcht ihn gerne darauf Hinweisen - bevor ich mich jetzt aber blamiere möchte ich hier zur sicherheit noch einmal nachfragen
-
überzeug dich selbst:
std::cout << "char: " << sizeof(char) << " Byte" << std::endl; std::cout << "bool: " << sizeof(bool) << " Byte" << std::endl;
char, unsigned char und bool sind auch immer nur 1 byte groß.
-
enno:
Er meint bestimmt, generell Plattformunabhägig.Bei char ist es auf jeden Fall so.
Bei bool weiß ich auch nicht.
-
genau so könnte ich jetzt sagen
sizeof(int) ist immer 4 Byte Großauf einen 16 Bit System (DOS) liefert mir sizeof(int) aber den Wert 2 Byte
-
SeppSchrot schrieb:
enno:
Er meint bestimmt, generell Plattformunabhägig.Bei char ist es auf jeden Fall so.
Bei bool weiß ich auch nicht.mmh... das hatten wir schon mal... - ich hab irgendwann gepostet das ich davon ausgegen bin das ein Byte immer 8 Bit hat - aber der Standard definiert diese Begriffe etwas anders - deshalb soll man ja zur größenbestimmung
sizeof(datentyp) * IRGENDEINE_KONSTANTE verwenden....mit Byte habe ich 8 Bit gemeint
-
sizeof(char) ist ja irgendwo glaub ich definiert als 1
wo anders steht sizeof(datentyp) liefet immer die Größe in Bytes
Fragt sich jetzt nur wie der Standard ein Byte definiert
-
Beachte erstens, dass ein Byte in C++ nicht als Oktett definiert ist, wie es mittlerweile im Computer Bereich üblich ist. char ist ein Byte groß. Die größe der anderen Typen ist aber nicht festgelegt!
-
char ist immer 1 Byte groß. Das liegt aber eigentlich nur daran, dass der Begriff Byte im C und im C++-Standard nicht automatisch 8 Bit bedeutet, sondern gerade so definiert wird, dass diese Beziehung gilt. Kleiner als 8 Bit geht nicht, mehr allerdings schon. So gab es früher Rechner mit 9Bit-"Bytes", heute gibt es einige DSPs, die 32Bit-"Bytes" haben. Wenn man hier sprachlich unterscheiden will, bietet sich der Begriff "Oktett" für 8-Bit-Bytes an.
-
char hat 1 Byte, der Rest ist Verhandlungssache.
Vertexwahn schrieb:
Fragt sich jetzt nur wie der Standard ein Byte definiert
Eh? Wie würdest du denn ein Byte definieren??
-
In C kann man die Anzahl der Bits in einem char durch das Makro CHAR_BIT herausbekommen.
-
Kleiner als 8Bit geht nicht? Aha.
Ich dachte immer, char müsste nur den gesamten Zeichensatz abbilden können.
-
wer erzählt denn hier 8bit wären kein byte? von einem 9bit-byte habe ich noch nie was gehört, werde dem mal nachgehen
aber es ist im computerwesen nunmal ein standard das:
0000 0000 == 8 bit === 2 nibble == 1 byte
und 1111 1111 == 256 (höchster wert von unsigned char)
warum sollte sich eine programmiersprache diesem standard entziehen, versteh ich nicht, habe ich auch noch nie davon gehört...werde mich mal schlau machen
-
SeppSchrot schrieb:
Kleiner als 8Bit geht nicht? Aha.
Ich dachte immer, char müsste nur den gesamten Zeichensatz abbilden können.Im C Standard steht, dass der Typ char entweder so ist wie der Typ unsigned char oder wie der Typ signed char. Für unsigned char muss es mindestens den negativen Wert -127 und den positiven Wert 127 geben. Für signed char muss das Maximum größer gleich 255 sein. Daraus folgt, dass char mindestens 8 Bit haben muss.
-
enno-tyrant schrieb:
wer erzählt denn hier 8bit wären kein byte? von einem 9bit-byte habe ich noch nie was gehört, werde dem mal nachgehen
aber es ist im computerwesen nunmal ein standard das:
0000 0000 == 8 bit === 2 nibble == 1 byte
und 1111 1111 == 256 (höchster wert von unsigned char)
warum sollte sich eine programmiersprache diesem standard entziehen, versteh ich nicht, habe ich auch noch nie davon gehört...werde mich mal schlau machen
Du meinst wohl 255. Meiner Meinung nach ist Byte nur eine Konvention und nicht auf 8 Bits festgelegt. Oktett dagegen ist immer 8 Bits. Aber vielleicht gibt es eine DIN Norm, die Byte auf 8 Bits festlegt. Dann würde ich es in Deutschland als gültig ansehen.
-
Ponto schrieb:
...Du meinst wohl 255...
nein, 255+0=256 (nicht mathematisch)
'0000 0000' ist auch eine zahl, nämlich die erste und:
von 0000 0000 bis 1111 1111 sind genau 256
-
Ponto schrieb:
...negativen Wert -127 und den positiven Wert 127 geben...
mhh, waren es nicht: -128 und 127
-
enno-tyrant schrieb:
Ponto schrieb:
...Du meinst wohl 255...
nein, 255+0=256 (nicht mathematisch)
'0000 0000' ist auch eine zahl, nämlich die erste und:
von 0000 0000 bis 1111 1111 sind genau 256Dann schreib es in dieser Art hin und nicht so missverständlich wie vorher. 1111 1111 in binär entsprechen 255 in dezimal und nicht 256.
-
enno-tyrant schrieb:
Ponto schrieb:
...negativen Wert -127 und den positiven Wert 127 geben...
mhh, waren es nicht: -128 und 127
Da der Standard 2er-Komplement nicht vorschreibt sind es nur -127
-
enno-tyrant schrieb:
wer erzählt denn hier 8bit wären kein byte? von einem 9bit-byte habe ich noch nie was gehört, werde dem mal nachgehen
aber es ist im computerwesen nunmal ein standard das:
Mittlerweile, aber das kam wohl erst in den 80igern. Siehe dazu auch The Art of Computer Programming: Fundamental algorithms | ISBN: 0201896834 und das Kapitel über MIX. MIX benutzt sogar nur 5 Bit Bytes.
warum sollte sich eine programmiersprache diesem standard entziehen, versteh ich nicht, habe ich auch noch nie davon gehört...werde mich mal schlau machen
Naja, C++ versucht halt so wenig Anforderungen an die unterliegenden Systeme wie möglich zu stellen.
@Bashar
Wo steht das mit den mindestens 8 Bit? char muss doch nur den Grundzeichensatz speichern können und der ist ja nur 96 Buchstaben groß.
-
enno-tyrant schrieb:
von einem 9bit-byte habe ich noch nie was gehört, werde dem mal nachgehen
[...]
warum sollte sich eine programmiersprache diesem standard entziehenDie Programmiersprache ist schon um einiges älter als dieser Standard. In grauer Vorzeit gab es sowas eben. B, eine der Vorgängersprachen von C, wurde bspw. auf einem Rechner mit 36Bit-Worten entwickelt.