Gå til innhold

Det binære tall systemet?


Anbefalte innlegg

Videoannonse
Annonse

Når du teller vanlig så bruker du tallene 1-9. For å kunne telle lenger enn til 9, så bruker vi en null hver gang vi ikke kan telle lenger.

 

0 - 1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 - (..) - 99 - 100 - 101

 

Samme med binært, men her her har du bare to tall, 0 og 1

 

0 - 1 - 10 - 11 - 100 - 101 - 110 - 111 - 1000

 

Det blir det samme som 0 -1 -2 -3 -4 -5 -6 -7 -8

 

 

Det er det grunnleggende. Masse informasjon på Wikipedia

Lenke til kommentar

Den "oversetteren" blir vel ikke korrekt mht. til tall?

Siden den er 8-bit ASCII tenker jeg på... :hmm:

 

Hvis du ser litt på de lenkene postet ovenfor og setter deg ned og teller litt på fingrene med 1 og 0 kommer du fort inn i det, er ikke fullt så vrient som det først kan se ut som. :)

Lenke til kommentar

her må du holde tunga i rett munn

 

"1" er et tegn, akkurat som "A" eller "ô" eller "ı"

 

det som ser ut som et tall "10100", er en streng satt sammen av 5 tegn, og beskrives således med 5 bytes (5 8 bits asciikoder, avhengig av tegnsett selvsagt)

 

Det finnes (naturlig nok) ingen automatikk i å pusle sammen flere bytes til større tall enn hva 8 bit kan håndtere.

 

Dette må isåfall være kjent for den om lager datainnholdet og for den som skal tolke det i etterkant.

 

Hvis du åpner en txt fil og ser det som ser ut som et tall der, f.eks "10100", så er det fordi fila inneholder 5 bytes, som utfra 8 bits ascii, danner de 5 tegnene som ser ut til å kunne være et gyldig binært tall.

 

Dette er fordi teksteditoren tolker alle bytes som strenger. Noe annet ville være ulogisk.

 

Diverse binærfiler pakker sammen tall i flere bytes. tallet 12398372, som representert som tekst er på 8 tegn, (og følgelig 8 bytes) - kan pakkes sammen til en 4 bytes integer istedet, hvor da de 4 bytene til sammen numerisk utgjør tallet som er vist.

 

De 8 tegnene ser slik ut som filinnhold:

perl -le 'print unpack "B*", 12398372'

 

Her er det 8 bits per tegn i teksten "12398372"

 

slik blir det binært (pakket som en integer på 4 bytes):

perl -le 'print unpack "B*",pack "I", 12398372'

 

Her er det totalt 32 bits (4 bytes) som tilsammen beskriver tallet 12398372 binært. Hver byte i seg selv vil ikke gi særlig mening, men hvis du på forhånd vet at 4 bytes skal settes sammen til en integer, kan du hente ut tallet.

 

perl -e 'do {print $_,": ",(pack "B8",$_),"\n"} for (unpack "B*",pack "I", 12398372) =~ /.{8}/g'

 

Der ser du hvordan hver av de 4 bytene ser ut hver for seg.

 

Det er av samme grunn det ikke gir mening å åpne binærfiler fra ymse programmer.

 

EDIT: det er opp til den oppegående forumleser å selv kjøre perlkodesnuttene for å se hva resultatet blir :)

Endret av Torbjørn
Lenke til kommentar
Hvis du ser litt på de lenkene postet ovenfor og setter deg ned og teller litt på fingrene med 1 og 0 kommer du fort inn i det, er ikke fullt så vrient som det først kan se ut som

 

Ekte datafolk kan telle til 1023 på fingrene... (men vær forsiktig med å bestille 4 av noe...)

 

@rrmagne: Her har det blitt dratt inn binært på to nivåer. Tallsystemet (som jeg antar at var det du spurte om) (jf drange_nets første svar) og koding av andre ting ( bokstaver ) i tall som kan være på binært eller andre systemer. (Og tallet 13 (fx) kan da enten kodes som 1101, eller som tegnene 1 og 3 som får hver sin kode)) Hvis du vil lære det binære tallsystemet, må du glemme alt om koding av tegn i første omgang, det bare forvirrer. Goofy er smart, tell på fingrene, hver finger er en bit og du får på en hånd: (. bøyd finger, | rett finger)

....|

...|.

...||

..|..

..|.|

..||.

..|||

.|... etc.

 

Håper dette ikke forvirret mer... (Det var den typen fingertelling som gav meg ahaopplevelse med binære tall en gang, etter det har alle tallsystemer vært like greie, bare jeg passer på å fjerne eller legge til noen ekstra fingre..)

M.

Endret av mysjkin
Lenke til kommentar

noen tanker rundt binærtall: (bruk "b"=binær, "d"=decimal)

 

1b = 1*2^0=1d

10b = 0*(2^0)+1(*2^1)=2d

111b =1*(2^0)+1*(2^1)+1*(2^2)=7d

 

10101010b=

0*1

+1*2

+0*4

+1*8

+0*16

+1*32

+0*64

+1*128

=170d

 

andre veien: starter med 70d

70-64=6

6-4=2

2-2=0

altså får vi: 1000110b

Endret av magikern
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...