Assembly:Float
Fra CodeWiki
Float er en 32-bits datatype. Den er bygget opp på følgende måte:
| Sign | Exp | Mantisse |
|---|---|---|
| 1-bit | 8-bit | 23-bit |
I noen tilfeller er Sign satt etter eksponenten, men det er ikke så vanlig.
Eksempel 1
Vi anntar et 32-bits floattall, 13,7510, som benytter formatet vist ovenfor (1+8+23, med offset 127). Hvordan vil dette tallet se ut om det er lagret i et byteorganisert minne?
Vi starter med å konvertere til binært.
13,75 = 1101.11
Det første vi gjør er å sette Sign til 0, siden dette er et positivt tall. Neste vi gjør er å flytte komma slik at vi kun får ett 1-tall foran komma. Dermed får 1.10111*2^3. Vi tar kun da tallene bak komma (10111) og fører dette inn i mantissen.
Mantissen vår blir dermed 10111 00000000000000000 (totalt 23 bit).
Eksponenten vår er 3. Da tar vi offsetten og legger til 3. 127 + 3 = 130 = 10000 0010., og dermed er det 130 vi skal sette inn i exp.
Det endelige flyttallet vårt blir dermed 0|100 0001 0|101 1100 0000 0000 0000 000 (totalt 32 bit delt inn i 4 og 4 bits).
Hexadesimalt får vi 415C 0000...
Eksempel 2
La oss prøve å gå andre veien: Tallet C0 20 00 0016 er gitt slik at det ligger fordelt over 4 lagerplasser. Vi antar samme format som i forrige oppgave. Hvilket desimaltall er dette?
Vi konverterer til binærtall. |1|100 0000 0|010 000....
Mantissen har vi som 1.01*2. 127+X = Y, hvorav Y er kjent og er 128. X blir dermed lik 1.
1.01*2^1 = 10.1 = -2.5
