hallo zusammen,
ich habe eine frage und zwar , wie kann ich weissen , wieviel bytes hat zum beispiel 1234ABCD und ob solch eine zahl mit einem standard c++/c typ darstellebar , wenn ja mit welchem und wenn nein warum nicht,
ich würde euch sehr dankbar, wenn jemend hat eine trick oder eine idee wie man das findet
danke
Hallo Fay,
ich habe eine frage und zwar , wie kann ich weissen , wieviel
bytes hat zum beispiel 1234ABCD
wenn das als Hex-zahl gemeint ist (anzunehmen), dann braucht sie 4 Bytes, ein Byte für je zwei hex-Ziffern.
und ob solch eine zahl mit
einem standard c++/c typ darstellebar , wenn ja mit welchem
„long“ oder „unsigned long“.
ich würde euch sehr dankbar, wenn jemand hat eine trick oder
eine idee wie man das findet
danke
Probier mal das:
#include
int main()
{
printf("%u", 1234ABCD);
system("pause");
return 0;
}
Noch was unklar?
lg
Martin B
Hallo Martin,
und ob solch eine zahl mit
einem standard c++/c typ darstellebar , wenn ja mit welchem„long“ oder „unsigned long“.
Kommt ganz auf den Compiler und die verwendete CPU an !!
Je nachdem kann auch int 32-Bit gross ein, dann ist short für 16-Bit zu verwenden.
In C/C++ gilt nur:
sizeof(char)
somit ist gewährleistet, dass, in der Reihe da oben, jeder Typ ohne Bitverluste einem rechts von ihm stehendenTyp zugewiesen werden kann.
MfG Peter(TOO)
Wobei short aber mindestens 16 Bit und long mindestens 32 Bit hat.
Hallo Fragewurm,
Wobei short aber mindestens 16 Bit und long mindestens 32 Bit
hat.
Ich weiss gerade nicht wie was in welchem ANSI-C-Standard genormt ist.
Wie ist das eigentlich bei 4-Bit CPUs geregelt ?
Da müsste char 4-Bit sein oder es muss einen zusätzlichen Datentyp geben.
Weiterhin haben ja nicht alle CPUs eine Wortbreite welche 2nx8 entspricht. z.B. 9-, 18- und 48-Bit waren auch schon üblich.
MfG Peter(TOO)
Hallo Peter,
Danke für den Hinweis. Heißt das aber nun:
wenn einer einen schlechten Tag hat, macht er auch schon mal long’s mit 16 Bit ??
So, daß „1234ABCD“ dann mit einem long nicht darstellbar ist?
lg
Martin B
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Martin,
Danke für den Hinweis. Heißt das aber nun:
wenn einer einen schlechten Tag hat, macht er auch schon mal
long’s mit 16 Bit ??
So, daß „1234ABCD“ dann mit einem long nicht darstellbar ist?
Im Prinzip ja, das hat aber nichts mit einem schlechten Tag zu tun, sondern kommt auf die CPU und den Compiler an !!
Es gibt eine ganze Reihe Parameter, welche ANSI nicht fest vorgibt, sondern welche vom Compilerhersteller festgelegt werden.
Dazu ist im Compiler-Handbuch extra ein Anhang vorgeschrieben, in welchem diese Werte und verhalten definiert werden.
Etwas typisches ist ob Big- oder Little-Endian verwendet wird. Dies ist von der CPU fast immer vorgegeben (es gibt CPUs welche beides können, da kann dann der Compilerhersteller wählen, was er implmentiert oder es sogar auswählbar machen).
Die meisten Programmierer haben von Big- oder Little-Endian sowieso keine Ahnung, was aber erst du Problemen führt, wenn der Sourcecode portierbar sein muss.
MfG Peter(TOO)
Weiterhin haben ja nicht alle CPUs eine Wortbreite welche
2nx8 entspricht. z.B. 9-, 18- und 48-Bit waren auch
schon üblich.
http://en.wikipedia.org/wiki/MIX, ^^ ist aber eklich
mfg TLF
Hallo TLF,
Weiterhin haben ja nicht alle CPUs eine Wortbreite welche
2nx8 entspricht. z.B. 9-, 18- und 48-Bit waren auch
schon üblich.
Im originalen englischen K&R war eine AUfzählung von Rechnern, mit, aus heutiger Sicht, ungewöhnlichen Wortbreiten enthalten.
http://en.wikipedia.org/wiki/MIX, ^^ ist aber eklich
Naja, eine akademische Spielerei und etwas wiedersprüchlich:
MMIXware: A RISC Computer for the Third Millennium
und dann hat das Ding Lochkarten und Lochstreifen …
MfG peter(TOO)
Hiho,
Naja, eine akademische Spielerei und etwas wiedersprüchlich:
MMIXware: A RISC Computer for the Third Millennium
und dann hat das Ding Lochkarten und Lochstreifen …
jo, ich kanns vor allem nicht wirklich nachvollziehen, sowas für Algorithmenbeschreibungen zu verwenden, aber was solls.
Hallo Peter(TOO)
Danke für Deine Hinweise.
Etwas typisches ist ob Big- oder Little-Endian verwendet wird.
Dies ist von der CPU fast immer vorgegeben (es gibt CPUs
welche beides können, da kann dann der Compilerhersteller
wählen, was er implmentiert oder es sogar auswählbar machen).Die meisten Programmierer haben von Big- oder Little-Endian
sowieso keine Ahnung, was aber erst du Problemen führt, wenn
der Sourcecode portierbar sein muss.MfG Peter(TOO)
Na, da schau’ her. Ich dachte immer:
WIN = Little-Endian
APPLE = Big-Endian
Heißt das nun, dass auch auf der Wintel-Maschine von „Big-Endian“ die Rede sein kann, wenn die bloss eine bestimmte CPU hat?
Ich dachte immer, das würde vom Datei-Format festgelegt, z.B.
WIN = \*.wav = Little-Endian
und
APPLE = \*.aiff = Big-Endian
?
Kurz, die Datei-Formate werden so entwickelt, dass sie für die jeweilige CPU eben passen?
lg
Martin B
Hallo Martin,
Na, da schau’ her. Ich dachte immer:
WIN = Little-Endian
APPLE = Big-Endian
Heißt das nun, dass auch auf der Wintel-Maschine von
„Big-Endian“ die Rede sein kann, wenn die bloss eine bestimmte
CPU hat?
Seit Apple auf Intel umgestiegen ist, stimmt die Regel nicht mehr !!
Ich dachte immer, das würde vom Datei-Format festgelegt, z.B.
WIN = *.wav = Little-Endian
und
APPLE = *.aiff = Big-Endian
?
Kurz, die Datei-Formate werden so entwickelt, dass sie für die
jeweilige CPU eben passen?
Ja, oder man speichert einfach vom RAM in die Datei und macht sich erst später gedanken …
Bei einer Datei, habe ich ja die Möglichkeit die Bytereihenfolge durch das Programm frei bestimmen zu können.
Wie das im RAM abgelegt wird, bestimmt mir die Hardware.
MfG Peter(TOO)