Bakke Skrevet 15. mai 2007 Del Skrevet 15. mai 2007 (endret) Det binære tallsystemet De fleste kjenner bare til det desimale tallsystemet som er basert på 10 tall (0,1,2,3,4,5,6,7,8,9). At det er basert på 10 tall er sikkert ikke tilfeldig, vi har jo 10 fingrer (det naturlige telle redskapet). Men det kunne og vert basert på 20, hvis du rekner med tærne (kanskje de hadde sko?). Men det finnes flere tallsystemer... Det binære tallsystemet er et av disse, som er basert på to tall (0,1). Det er dette tall systemet datamaskinen din forstår. Men hvordan kan da dataen forstå ord? Det er nettopp det jeg har tenkt å lære deg i denne bruker-guiden. Litt om bits og bytes Bit - 1 eller 0 Byte - En serie av 8 bits. Kilobinær - 1024 bytes (2^10) Megabinær - 1024 kilobytes (2^20) Gigabinær - 1024 megabytes (2^30) Terabinær - 1024 gigabytes (2^40) Du ser kanskje ut fra dette at maskinen tenker i en togang. Merk og at en bokstav/tegn er 1 byte, altså en serie av 8 bits (0 eller 1). Hvorfor, skal vi komme tilbake til. Det desimale tallsystemet Du lærte sikkert på skolen at i f.eks tallet 123 er det 1 hundrer, 2 tiere, og 3 enere. Det kan og skrives: 1*100 + 2*10 + 3*1 = 123. Legg merke til hvordan tallene vi multipliserer med går i en tigang. Som sagt er det dette systemet vi bruker, men ikke datamaskinen... Det binære tallsystemet I dette systemet vil 123 bli representert noe annerledes: 0*128 + 1*64 + 1*32 + 1*16 + 1*8 + 0*4 + 1*2 + 1*1 = 01111011. Legg merke til hvordan tallene vi multipliserer med går i en togang. Du ser kanskje systemet, vi ser om tallet går opp i 128, så 64, så 32 osv. Du ser og kanskje at hvis du legger sammen tallene får du 255 (hvis du rekner med 0 blir det 256 tegn), og at 2^8 = 256. Da kommer vi inn på ASCII tabellen. For å kunne gjøre disse tallene om til ord trenger vi denne, hver bokstav er representert av et tall fra det desimale tallsystemet. ASCII tabellen inneholder 256 tegn (hvis du rekner med den utvidede delen der ÆØÅ er), derfor er en byte akkurat nok til å dekke alle de 256 tegnene Hvordan gjøre binærtall om til desimal? Her har vi en formel som gjelder alle tallsystem: siffer * tallsystem ^ posisjon. Så hvis vi skal gjøre 01111011 om til 123 igjen, blir det: 0*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 1*64 + 1*32 + 1*16 + 1*8 + 1*2 + 1*1 = 64 + 32 + 16 + 8 + 2 + 1 = 123 Takk til Jaffe for denne formelen. Eksempel Helt til slutt vil jeg ta med et eksempel: La oss ta ordet "hw", og gjøre det om til binærtall. Først gjør vi bokstavene om til tall fra det desimale tallsystemet ved hjelp av ASCII tabellen, da får vi h = 104 og w = 119. Så for å gjøre tallene om til binærtall gjør vi følgende: 0*128 + 1*64 + 1*32 + 0*16 + 1*8 + 0*4 + 0*2 + 0*1 = 01101000 og 0*128 + 1*64 + 1*32 + 1*16 + 0*8 + 1*4 + 1*2 + 1*1 = 01110111, resultat 0110100001110111. Binærtallet 01110011 om til 115: 0*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 1*64 + 1*32 + 1*16 + 1*2 + 1*1 = 64 + 32 + 16 + 2 + 1 = 115 Addisjon Addisjon i det binære tallsystemet følger samme reglene som i det desimale tallsystemet. Når vi får en høyere verdi en det er tall i tallsystemet, skriver vi opp et minnetall. F.eks: 79 + 117 = 196 1111111 01001111 +01110101 --------- =11000100 Vi begynner helt til høyre, der har vi 1 + 1 = 2, da skriver vi opp et minne tall. Slik fortsetter det. Du ser kansje at da vi har 1 + 1 + 1 = 3, blir det 1 og et minnetall. Subtrahering Dette fungerer nesten på samme måte som addisjon. 0 - 0 = 0 0 - 1 = 1 (med låning) 1 - 0 = 1 1 - 1 = 0 Grunnen til at 0 - 1 (med låning) blir 1, er at da du låner et tall blir det 2 (2 - 1 = 1). La oss trekke 79 fra 117 (117 - 79 = 38): *** 01110101 -01001111 ------------ =00100110 (* markerer tall som har blitt lånt fra). Legg merke til at da nullen låner for å kunne låne til tallet til høyre, blir 1 stående igjen. Multiplikasjon Dette gjøres også som i det desimale tallsystemet. For hvert siffer i tall2 blir produktet av det sifferet i tall1 utregnet og skrevet på en ny linje, et hakk til venstre for hver gang. F.eks 10 x 11 = 110: 00001010 (tall1) *00001011 (tall2) ------------- 00001010 00001010 00000000 +00001010 ------------- =00001101110 Noen ord til sist Om det er noe som er feil kan du godt ta det over pm eller poste så skal jeg rette det snarest, eller så er det bare å stille spørsmål om du lurer på noe. Hvis noen føler for det kan de godt poste denne andre plasser eller bruke den på en hjemmeside, så lenge ingenting blir endret og navne mitt kommer med Magnus Hauge Bakke Endret 27. mai 2007 av Mr. Bakke 2 Lenke til kommentar
Jaffe Skrevet 16. mai 2007 Del Skrevet 16. mai 2007 (endret) Fin guide, men kanskje den passer bedre et annet sted? Dette er jo ikke nødvendigvis om programmering, selv om det uten tvil blir brukt en del spesielt i lavnivåprogarmmering. Savnet også at du tok med hvordan man går andre veien, fra desimal til binær, og evt. hvordan man adderer o.l. i binær. For å være helt generell kunne du vel skrevet at alle tallsystem fungerer slik: (siffer * tallsystem ^ posisjon) for hvert siffer i tallet, addert med andre sifferverdier. For å rekne verdien 1110 til desimal gjør vi da: 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 1*8 + 1*4 + 1*2 = 8 + 4 + 2 = 14 Det som er bra med denne "formelen" er at den som sagt gjelder alle tallsystem. Vi kan f.eks. rekne verdien 2A3C fra hex til desimal: (Merk at heksadesimale tall har ekstra siffer fra 10 til 15 som numereres fra A til F) 2*16^3 + A*16^2 + 3*16^1 + C*16^0 = 2*4096 + 10*256 + 3*16 + 12*1 = 8192 + 2560 + 48 + 12 = 10812 Eller, vi kan oversette fra femtallsystemet, eller hvilket som helst annet tallsystem. Men som sagt, fin guide EDIT: det heter togang, ikke toggang (tog? hæ?) Endret 16. mai 2007 av Jaffe Lenke til kommentar
Thorsen Skrevet 16. mai 2007 Del Skrevet 16. mai 2007 Fin guide ja.. Men kanskje er heksadesimalt vel så viktig for programmering som binært. Legger ved et notat på 4 sider fra UIS som går generelt over noen tallsystemer og beregninger frem og tilbake. Tallsystemer.pdf Lenke til kommentar
Bakke Skrevet 16. mai 2007 Forfatter Del Skrevet 16. mai 2007 (endret) Kan sikkert skrive enda en om heksdesimal, når jeg får tid. Men først må jeg lage en update på denne, legge ved noe av det Jaffe sier Edit: - Retta toggang til togang - Har lagt til hvordan man gjør binærtall om til "vanlige tall". Endret 16. mai 2007 av Mr. Bakke Lenke til kommentar
Jaffe Skrevet 17. mai 2007 Del Skrevet 17. mai 2007 Du kan jo også skrive om hvordan man går fra desimal til binær? Og muligens hvordan man adderer binære tall. Det er en enkel sak, og man følger bare de samme reglene som ved vanlig addisjon: Når man får en høyere verdi enn det er siffer i tallsystemet, skriver vi opp et minnetall: CODE 1 1111 11101101 (237) + 11001011 (203) = 110111000 (440) Vi begynner altså lengst mot høyre, som alltid, og legger sammen 1 og 1. Da får vi 2d, som vi ikke har siffer for i totallssystemet. Da må vi sette 1 som minnetall og 0 som resultat (10b = 2d). Så tar vi neste tall som er 1, men her har vi minnetallet som må tas med, så da blir det 1 + 1 = 10b som svar også her. Slik fortsetter det helt til vi har kommet til siste siffer. Da kan vi ikke skrive minnetallet opp lenger, så da skriver vi hele resultatet. Som sagt er dette akkurat det samme som i desimaladdisjon, men i stedet for å skrive minnetall når deladdisjonen resulterer i et tall større enn 9, skriver vi minnetall når det er større enn 1. Lenke til kommentar
Bakke Skrevet 17. mai 2007 Forfatter Del Skrevet 17. mai 2007 Jeg har da tatt med hvordan man gjør desimal om til binær. Men kan kansje slenge på addisjon osv senere, tar sikkert med mer enn bare addisjon da Lenke til kommentar
Jaffe Skrevet 17. mai 2007 Del Skrevet 17. mai 2007 Jeg har da tatt med hvordan man gjør desimal om til binær. Men kan kansje slenge på addisjon osv senere, tar sikkert med mer enn bare addisjon da 8634660[/snapback] Jeg kan ikke se at du beskriver hvordan man går fra desimal til binær, bare andre veien, fra binær til desimal. Lenke til kommentar
Bakke Skrevet 17. mai 2007 Forfatter Del Skrevet 17. mai 2007 (endret) Helt til slutt vil jeg ta med et eksempel: La oss ta ordet "hw", og gjøre det om til binærtall. Først gjør vi bokstavene om til tall fra det desimale tallsystemet ved hjelp av ASCII tabellen, da får vi h = 104 og w = 119. Så for å gjøre tallene om til binærtall gjør vi følgende: 0*128 + 1*64 + 1*32 + 0*16 + 1*8 + 0*4 + 0*2 + 0*1 = 01101000 og 0*128 + 1*64 + 1*32 + 1*16 + 0*8 + 1*4 + 1*2 + 1*1 = 01110111, resultat 0110100001110111. I dette systemet vil 123 bli representert noe annerledes: 0*128 + 1*64 + 1*32 + 1*16 + 1*8 + 0*4 + 1*2 + 1*1 = 01111011. Legg merke til hvordan tallene vi multipliserer med går i en togang. Du ser kanskje systemet, vi ser om tallet går opp i 128, så 64, så 32 osv. Kansje ikke så bra forklart men... Endret 17. mai 2007 av Mr. Bakke Lenke til kommentar
Jaffe Skrevet 17. mai 2007 Del Skrevet 17. mai 2007 Ah, såklart, slik kan du også gjøre det. Du kunne kanskje forklart det litt nærmere. Men du kan også gjøre det ved å dele tallet på 2 og ta resten som en bit etter hver divisjon: 123 / 2 = 61.5 | 1 61 / 2 = 30.5 | 1 30 / 2 = 15 | 0 15 / 2 = 7.5 | 1 7 / 2 = 3.5 | 1 3 / 2 = 1.5 | 1 1.5 / 2 = 0.76 | 1 Så ordner vi bitene i motsatt rekkefølge: 1111011 Lenke til kommentar
Ståle Skrevet 19. mai 2007 Del Skrevet 19. mai 2007 Hvordan adderer/subtraherer/dividerer og multipliserer man binaere tall? Lenke til kommentar
Bakke Skrevet 19. mai 2007 Forfatter Del Skrevet 19. mai 2007 Skal legge dette til i guiden når jeg får tid, eventuelt i løpet av dagen. Jaffe har og skrevet om addisjon noen poster lengre opp Lenke til kommentar
Bakke Skrevet 19. mai 2007 Forfatter Del Skrevet 19. mai 2007 Update: Har lagt til addisjon, subtrahering og multiplikasjon. Divisjon og telling kommer når jeg får tid Lenke til kommentar
Gjest Slettet+142 Skrevet 19. mai 2007 Del Skrevet 19. mai 2007 (endret) Veldig grei guide Jeg føler faktisk at jeg kan dette med binærtall etter å ha lest dette Endret 19. mai 2007 av Slettet+142 Lenke til kommentar
Goscinny Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Nydelig! Det kom jo en guide på HW-forsiden for et par måneder siden, men den forsvant etter noen få timer Av den grunn hilser jeg denne guiden hjertelig velkommen. Ganske artig dette her. Spørsmål: Dersom PC-er hadde brukt titallssystemet istedenfor hadde jo lengden på tallene blitt redusert. Ville det da gått fortere? Den vil jo samtidig ha flere ulike tall å lese, så det vil kanskje gå senere på grunn av det? Uansett regner jeg med at det ville gått seinere siden de bestemte seg for totallssystemet og ikke har gått over til titallssystemet ... Goscinny Lenke til kommentar
Thorsen Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Nydelig! Det kom jo en guide på HW-forsiden for et par måneder siden, men den forsvant etter noen få timer Av den grunn hilser jeg denne guiden hjertelig velkommen. Ganske artig dette her. Spørsmål: Dersom PC-er hadde brukt titallssystemet istedenfor hadde jo lengden på tallene blitt redusert. Ville det da gått fortere? Den vil jo samtidig ha flere ulike tall å lese, så det vil kanskje gå senere på grunn av det? Uansett regner jeg med at det ville gått seinere siden de bestemte seg for totallssystemet og ikke har gått over til titallssystemet ... Goscinny 8654740[/snapback] Svar: Kanskje men det ville vært nærmes umulig å realisere sett ut fra elektronikken bak. 0 og 1 kan ganske enkelt representeres med strøm av og strøm på. F.eks 0v og 5v. Å lage systemer som reagerer forskjellig ut fra inngangsignalet er relativt enkelt når inngangsignalet bare kan ha to verdier (0 eller 1). Skulle man hatt digitale systemer som helt ned på elektronikk stadiet arbeidet på 10-tall systemet ville man fått et problem. For det første må man kunne skille mellom tallene f.eks ved at: 0 = 0V 1 = 1V 2 = 2V Osv, men så kommer problemene når disse tallene igjen skal legges til hverandre, subtraheres osv. Lenke til kommentar
Goscinny Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 (endret) Ah, det burde jeg jo skjønt. Takk for forklaringen Goscinny Endret 20. mai 2007 av Goscinny Lenke til kommentar
Jaffe Skrevet 23. mai 2007 Del Skrevet 23. mai 2007 Jeg tror nok det heksadesimale tallsystemet blir brukt mer i programmeringssammenheng enn det binære, så det kan du jo kanskje skrive om, Mr. Bakke? Lenke til kommentar
Bakke Skrevet 23. mai 2007 Forfatter Del Skrevet 23. mai 2007 Kommer nok det og ja Lenke til kommentar
Simen1 Skrevet 27. mai 2007 Del Skrevet 27. mai 2007 Litt om bits og bytes Bit - 1 eller 0 Byte - En serie av 8 bits. Kilobyte - 1024 bytes (2^10) Megabyte - 1024 kilobytes (2^20) Gigabyte - 1024 megabytes (2^30) Terabyte - 1024 gigabytes (2^40) 8620376[/snapback] Dette er direkte feil (teknisk og starndard-messig), men er dessverre en svært vanlig feil. Kanskje først og fremst på grunn av at Microsoft aldri har brydd seg med å følge ekte standarder. Det har dermed oppstått en "de facto standard" eller sagt bedre på norsk: en uvane. SI-standarden har sagt i over 100 år og sier fortsatt: k = kilo = 1000 = 10^3 M = mega = 1000000 = 10^6 G = giga = 1000000000 = 10^9 T = tera = 1000000000000 = 10^12 Dette er ikke det samme som den binært tilpassede IEC-standarden fra 1998. Slik ser IEC-standarden ut: Ki = kilobinær = 1024 = 2^10 Mi = megabinær = 1024 kilobinær = 1048576 = 2^20 Gi = gigabinær = 1024 megabinær = 1073741824 = 2^30 Ti = terabinær = 1024 gigabinær = 1099511627776 = 2^40 Tabellen du oppgir er altså feil fordi den hverken følger IEC-standarden (ord og forkortelser er feil) eller SI-standarden (tallene er feile). Lenke til kommentar
Bakke Skrevet 27. mai 2007 Forfatter Del Skrevet 27. mai 2007 Update: Rettet det som Simen1 skrev. 1 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå