Gå til innhold

Hvordan konvertere binært til desimal


Netrom00

Anbefalte innlegg

Jeg lurer på hvordan datamaskinen konverter fra det binære tallsystemet til titallsystemet, og hvordan dette skjer helt på det grunnleggende nivået i datamaskinen. Jeg har sjekket litt rundt på nettet, og på alle metodene jeg har sett så må man også regne med titallsystemet for å få det til. Derfor skjønner jeg ikke hvordan datamaskinen får dette til, siden den bar kan regne i det binære tallsystemet?

 

Takk for alle svar

Lenke til kommentar
Videoannonse
Annonse

 

 

Jeg lurer på hvordan datamaskinen konverter fra det binære tallsystemet til titallsystemet
Enkelt og greit, den gjør ikke det.

 

Det den gjør er å bruke en matematisk metode med flere steg for å omgjøre bitkombinasjonen som står for et tall til en bitkombinasjon som står for talltegnene, og tegne dem på skjermen.

 

(jeg skriver % foran binærtall)

 

F.eks. %00000101 står for tallet 5 i titallsystemet.

 

Om det skal vises på skjermen så bruker maskinen en metode for å regne om til %00110101, som er kombinasjonen som står for tegnet 5. Maskinen "vet" imidltertid ikke at vi oppfatter dette som tallet 5. At tegnet 5 skal ha akkurat den kombinasjonen er en standard som er tilfeldig valgt av menneskene.

  • Liker 1
Lenke til kommentar

alle metodene jeg har sett så må man også regne med titallsystemet for å få det til. 

 

Jeg lurer litt på om du kanskje har blitt litt lurt av det som kalles "decimal computers" (vanlige på 40- og 50-tallet) og binærkodet desimal-format (BCD). I BCD så bruker man fire bits på å kode hvert desimaltall*. Dette er noen sløseri å kaste fire bits på å representere 0-9 (10 varianter/kombinasjoner) siden fire bits kan representere 16 forskjellige kombinasjoner, så de gikk senere bort i fra dette til å kun bruke ekte binærkoding som er mye mer effektivt til å pakke data.

 

Jeg vet ikke hvorfor man brukte BCD, men jeg vil anta at det var pga beleilighet. Enklere å konvertere ett og ett desimaltall i hodet, men ren gjetning.

 

Du finner fremdeles instruksjonskoder i x86-prosessorene som kan konvertere fra BCD-format til binærformat før du jobber videre på tallene, men det er kun pga BCD-formatets historiske utbredelse.

 

Om du faktisk leter etter hvordan man regner med binærtall vil du se at det faktisk kan være enklere enn desimaltall - i hvert fall for addisjon. Det er en litt forenklet framstilling, siden man i maskiner bruker en fiks idé kalt én-komplementsnotasjon på tallene for å gjøre enkelte operasjoner enklere å implementere, men hovedtrekkene fra eksempelet jeg lenket til gjenstår.

 

* De som nileser på BCD ser at jeg har tatt meg noen friheter, men det er kun for å gi en enklere formidling.

Endret av 8086
  • Liker 1
Lenke til kommentar

Ser at noen ikke skjønte helt hva jeg lurte på, men syenes at svaret til Emancipate og 8086 ga meg svaret på det jeg lurte på. Tror at jeg bare har misforstått litt hvordan ting fungerer i datamaskinen. Så takk ☺

Endret av Mserkul
Lenke til kommentar

Hva er det egentlig du lurer paa? Datamaskinen vet at 11111111 er 255, men skjønner at det egentlig ikke er det du lurer paa.

Som jeg har forstått så lagres et siffer som en byte. Så hvis du skriver inn et regnestykke på dataen som blir regnet ut og så skal hvises på skjermen, hvordan kan datamaskinen vite hvilket tegn den skal hvise på skjermen. For eksempel hvis svaret i et regnestykke er 1100 som er 12, hvordan greier datamaskinen å finne ut at den skal hvise ett ettall og ett totall.

Endret av Mserkul
Lenke til kommentar

 

Hva er det egentlig du lurer paa? Datamaskinen vet at 11111111 er 255, men skjønner at det egentlig ikke er det du lurer paa.

Som jeg har forstått så lagres et siffer som en byte. Så hvis du skriver inn et regnestykke på dataen som blir regnet ut og så skal hvises på skjermen, hvordan kan datamaskinen vite hvilket tegn den skal hvise på skjermen. For eksempel hvis svaret i et regnestykke er 1100 som er 12, hvordan greier datamaskinen å finne ut at den skal hvise ett ettall og ett totall.

 

Maskinen jobber alltid med 1 og 0-tall. Eneste stedet hvor noe annet vises er på skjermen vår. Trykker du på "8" i kalkulatoren så skriver du egentlig inn 00000000 00000000 00000000 00001000.

  • Liker 1
Lenke til kommentar

Fordi den er programmert slik! Enkelt og greit, maskinen bare vet at 1100  er 12. og at 1101 er 13, osv...

Den "bare vet" det ikke. Den må bruke en programsnutt laget av et menneske, sammen med ascii-standarden, laget av et menneske, og en font med talltegn på riktig nummer i ascii-tabellen. Algoritmen ser ca sånn ut:

Tall = %1100
While Tall
  Siffer = Tall mod %1010 ; Tall modulo 10
  Tall =   Tall / %1010 ; Del tallet på 10
  SifferTegn = Siffer + %110000 ; Der 110000 er plassen 48 på ascii-tabellen
  Print(Chr(SifferTegn)) ; og chr forteller at det er et tegn fra ascii-tabellen som skal vises
Wend

Eneste problemet er at tallene kommer ut bakvendt. Det bruker man å rette opp etterpå.

 

Print() slår opp i en skrifttype og viser tegnet med det nummeret på skjermen.

 

Sifrene fra 0 til 9 har tegn nummer 48 til 57, i tilsvarende rekkefølge.

 

  • Liker 1
Lenke til kommentar

 

alle metodene jeg har sett så må man også regne med titallsystemet for å få det til. 

 

Jeg lurer litt på om du kanskje har blitt litt lurt av det som kalles "decimal computers" (vanlige på 40- og 50-tallet) og binærkodet desimal-format (BCD). I BCD så bruker man fire bits på å kode hvert desimaltall*. Dette er noen sløseri å kaste fire bits på å representere 0-9 (10 varianter/kombinasjoner) siden fire bits kan representere 16 forskjellige kombinasjoner, så de gikk senere bort i fra dette til å kun bruke ekte binærkoding som er mye mer effektivt til å pakke data.

 

Jeg vet ikke hvorfor man brukte BCD, men jeg vil anta at det var pga beleilighet. Enklere å konvertere ett og ett desimaltall i hodet, men ren gjetning.

 

Du finner fremdeles instruksjonskoder i x86-prosessorene som kan konvertere fra BCD-format til binærformat før du jobber videre på tallene, men det er kun pga BCD-formatets historiske utbredelse.

 

Om du faktisk leter etter hvordan man regner med binærtall vil du se at det faktisk kan være enklere enn desimaltall - i hvert fall for addisjon. Det er en litt forenklet framstilling, siden man i maskiner bruker en fiks idé kalt én-komplementsnotasjon på tallene for å gjøre enkelte operasjoner enklere å implementere, men hovedtrekkene fra eksempelet jeg lenket til gjenstår.

 

* De som nileser på BCD ser at jeg har tatt meg noen friheter, men det er kun for å gi en enklere formidling.

 

 

Dette er ikke helt korrekt. For finanssystemer er for eksempel BCD fremdeles viktig.

Hvis du lurer på hvorfor, så vis meg hvordan du uttrykker desimaltallet 0,1 nøyaktig med int eller float.

Lenke til kommentar

 

 

Dette er ikke helt korrekt. For finanssystemer er for eksempel BCD fremdeles viktig.

Hvis du lurer på hvorfor, så vis meg hvordan du uttrykker desimaltallet 0,1 nøyaktig med int eller float.

Joda, det er korrekt. BCD er utdatert.

 

Man bruker da noe som heter fixed point number, som er en int (gjerne stor) som er skalert med et fast antall plasser, slik at den alltid har f.eks. 4 plasser bak komma.

 

Evt. "decimal", som er en type som fungerer som litt som float, bare litt annerledes for å bli i titallsystemet: https://en.wikipedia.org/wiki/Decimal128_floating-point_format

Lenke til kommentar

Dette er ikke helt korrekt. For finanssystemer er for eksempel BCD fremdeles viktig.

Hvis du lurer på hvorfor, så vis meg hvordan du uttrykker desimaltallet 0,1 nøyaktig med int eller float.

 

Som sagt, "Jeg vet ikke hvorfor man brukte BCD" ;-) Men trunkeringsfeil har jo alle tallsystemer, BCD inkludert. Forsøkt f.eks. å uttrykke 1/3 nøyaktig med binærtall eller BCD. Med tertiærsystemer er det jo simpelt  :tease:

 

Men som Emancipate nevner, så lenge man har et fast antall siffer å forholde seg til kan man løse det enkelt ved å skalere heltall, f.eks. uttrykke kronebeløp i øre.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...