asci, integer, real
-
hallo, ich schreib morgen einen test. es wurde gesagt wir sollen zum beispeil auch wissen was integer, asci und real zahlen sind und was man mit denen ausgeben kann. leider weiss ich nicht wirklich was damit gemeint ist, wir hatten die datentypen also int, float, double und so weiter, aber was hat das mit real oder asci zu tun?
kann mir jemand was dazu sagen?
danke
mfG
detlef
-
keine ahnung, aber würde da nicht die msdn oder ein c-buch weiterhelfen?
-
mit dem ascii code werden die zeichen intern im computer dargestellt.
so ist z.b. dem zeichen 'A' der ascii code 65 zugeordnet. der computer
kennt keine zeichen, sondern nur zahlen (genauer bit-folgen) die er
entsprechend interpretiert.integer (int) sind "ganz"-zahlen, also im wesentlichen die natuerlichen
zahlen: -2; 5; 1999; -945; 0; ....dann gibt es noch die fliesskommazahlen (float, double), das sind
alle reelen zahlen: 1; 3.45; -0.3; 992; 2e2; usw...
beim rechnen mit diesen zahlen ist darauf zu achten, dass sie nicht 100%
genau sind (der computer kann nur mit einer endlichen anzahl von komma-
stellen rechnen, manche ergebnisse wuerden aber unendlich viele nach-
kommastellen benoetigen).
-
danke, hab ich soweit versatnden, und welchen zahlenbereich kann ich zum beispiel mit einer 32 bit float zahl darstellen. ist das richtig, dass cih mantisse mal 2^e, wobei e bis 127 geht darstellen kann. das sind ja zahlen im bereich von 10 hoch 38, stimmt das?
-
detlef schrieb:
danke, hab ich soweit versatnden, und welchen zahlenbereich kann ich zum beispiel mit einer 32 bit float zahl darstellen. ist das richtig, dass cih mantisse mal 2^e, wobei e bis 127 geht darstellen kann. das sind ja zahlen im bereich von 10 hoch 38, stimmt das?
IEEE Gleitkommazahlen sind folgendermaßen aufgebaut
S E M x xxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx 0 1 7 8 31
Im ersten Bit steht das Vorzeichen anschließend 8 Bit Exponent, dann 23 Bit Mantisse.
Zu beachten ist, dass man den immer den Wert des Exponent - 127 nehmen muss, demzufolge Wertebereich von -127 bis +128. Die Mantisse wird zumeist normalisiert angegeben, d.h. wenn ich die dezimale Zahl 16 habe, dann ist das dual 10000
normalisiert 1 * 2 ^ 4. Man verschiebt also solange das Komma bis eine 1 davorsteht. Diese geht nicht in die Mantisse ein. Als Gleitpunktzahl
16 =
0 10000011 00000000000000000000000
1 * 2^(131-127)Hoffe das war so richtig, ansonstenhttp://www.psc.edu/general/software/packages/ieee/ieee.html
Gruß TObias Bell
-
das kommt auf den compiler und die plattform an.
schau am besten mal in die header-dateien:
<limits.h> und <float.h>.
-
Hier kleines Test-Programm
#include <stdio.h> #include <stdlib.h> typedef float ftype; /*typedef double ftype;*/ int main(int argc, char **argv){ ftype number; int i,j; if (argc<2){ printf("I need at least one argument (floating point number).\n"); exit(1);} number = (ftype)atof(argv[1]); printf ("The floating point number %g is represented as:\n",number); for(i=sizeof(ftype)-1;i>=0;--i) for(j=7;j>=0;--j) printf("%d",((((unsigned char*)(&number))[i])>>j)%2); printf("\n"); return 0; }