Gå til innhold
Trenger du skole- eller leksehjelp? Still spørsmål her ×

Rekne med binær, hex osv


Anbefalte innlegg

Jeg har en oppgave. Å regne fra binær til hex går av og til greit. Jeg gjør om binærtall talla til 10tall systemet, og finner hextallet i en ASCII liste jeg fann på nettet.

Men som jeg har forstått så går den ikke lenger opp enn til 127.

 

Hva gjør jeg når jeg skal rekne binærtall som er større enn 127 om til hexadesimaler?

 

Eksempel: 1111 1111 = 255. Hvordan gjør jeg denne om til hexadesimaler?

 

Det blir vel værre å skulle rekne fra hex til binær?
Eksempel: 0x7D.

Er det vanlig å rekne den veien, eller er det helst kun fra binær til hexadesimaler?

Lenke til kommentar
Videoannonse
Annonse

bin til hex:

0000 = 0

0001 = 1

0010 = 2

0011 = 3

0100 = 4

0101 = 4

0110 = 6

0111 = 7

1000 = 8

1001 = 9

1010 = A

1011 = B

1100 = C

1101 = D

1110 = E

1111 = F

 

Ut fra dette ser du at 1111 1111 = 0xFF

 

Eksempel: 0xDEADBEEF = 1101 1110 1010 1101 1011 1110 1110 1111

  • Liker 1
Lenke til kommentar

Det hjelper om du husker at ett hex-siffer er fire bit. Listen over er forsåvidt det du trenger, men du kan fort gjøre det i hodet for småting.

 

Fra hex til binært, f.eks. 0x7D :

0x7 = 7 = 4+2+1, så 0111b .

0xD = 13 = 8+4+1 = 1101b .

Slå de sammen, og du får 01111101b .

 

Andre veien blir mye det samme. For 11100101b :

1110b = 8+4+2 = 14 = 0xE

0101b = 4+1 = 5 = 0x5

 

Altså 0xE5.

 

edit: Akkurat. :)

Endret av Djn
Lenke til kommentar

Sjekk her.

 

0x80

0x97

0x00

0x3A

0x7F

 

Her er de sortert fra venstre til høyre. Minst til størst.

 

Hvordan kan jeg vite at 0x80 og 0x97 er negative tall? 0x00 er jo 0.

 

 

Edit: fra top til bunn, minst til størst vart det visst.

Endret av Manlulu
Lenke til kommentar

AND betyr (antageligvis, det er litt ettersom sammenheng og språk) en bitwise and:

Skriv de to tallene ut som binærtall over hverandre. Der begge to er 1 blir "summen" 1, alt annet blir 0.

 

 

0011

AND 0101

= 0001

 

Du kan sammenligne med OR (1 hvis a eller b eller begge):

0011

OR 0101

= 0111

 

og XOR (1 hvis a eller b men ikke begge er 1):

0011

XOR 0101

= 0110

 

 

Negative tall er ... uh. Det er egentlig ikke "innebygd" i hex i seg selv - rent matematisk fungerer de akkurat som andre tall. Derimot er det noen mer tekniske/praktiske måter å lagre og regne med negative tall i prosessorer, og det er antageligvis en av de det er meningen du skal vite om.

 

Den vanligste er two's complement, så jeg antar det er det de mener her.

Du kan se om et tall er negativt ved å se på den største biten: Hvis den er 0 er tallet positivt, hvis den er 1 er tallet negativt.

0x80 = 1000 0000b , altså negativt.

 

Du kan forsåvidt se på wikipedia-siden for å se hvordan du konverterer mellom positive og negative tall, og hvordan det brukes - de praktiske eksemplene der så greie ut.

Endret av Djn
Lenke til kommentar

Jeg skal se mer på dette med hex og AND. Det er veldig godt mulig at det er slik som du sier. Jeg håper, for da skjønner jeg det :p

 

Jeg tror faktisk du er helt spot on med Two's complement. Vi har om toerkomplement på skolen, så det er nåkk helt sikkert dette lærern vil frem til.

 

Takk for utfyllende svar Djn :) jeg lærer mye av å spørre her inne :)

Lenke til kommentar

Alle bitwise-operasjonene er egentlig veldig lette, ja. :)

 

Sånn kort oppsummert er hele settet:

AND: Er begge 1?

OR: Er minst en av dem 1?

XOR: Er de forskjellige / er akkurat én av dem 1?

NAND: Er minst en av dem 0 / er ikke begge 1?

og NOT, som flipper om alle bits i et tall (NOT 101 = 010 . Jeg tror tanken er "ikke 1, men ...")

 

A NAND B er forsåvidt det samme som NOT(A AND B), derav navnet.

 

(Or og xor er forskjellen på "du kan ta sjokolade eller lakris [eller begge]" vs "du kan ha på deg bukser eller shorts [men ikke begge]" - "inklusiv eller" vs "ekslusiv eller".)

Endret av Djn
Lenke til kommentar

Takker :) Etter mye om og men så fortstår jeg tror jeg.. men av en eller annen grunn så var den der en skikkelig brainkill

 

Innimellom hjelper det å tenke på hvorfor ting historisk er som de er:

 

For å vise tekst på en skjerm må man bruke en font. En bitmap-font er bare en serie like store bilder, ett per tegn. Hvis det første bildet er 'a', det neste 'b', osv - så kan man lagre 'a' som 0, 'b' som 1, 'c' som 2, osv. For å vise tekst tar man så den rekken med tall og plukker ut de tilsvarende bildene. I tillegg er det kjekt å kunne sende kommandoer, så man setter gjerne av en del tall til å styre.

 

For å sende tekst til en skriver gjelder det samme - man må ha en standard på hvilket tall som er hvilket tegn, og en måte å si ting som "gå ned en linje". Den standarden - som altså dekker både skrivere og skjerm-fonter og forsåvidt alt annet, er et tegnsett.

 

Den eneste måten tegnet 0 kan bli lagret som tallet 0 er hvis det tilfeldigvis er det aller første tegnet i tegnsettet. I ASCII, som er klart vanligst*, har man reservert de laveste tallene til helt andre ting - 0 blir ofte brukt som "teksten slutter her", og 1-31 er diverse kontrolltegn ("overskrift starter", "slutt på felt", "lag en pipelyd", pluss litt vanligere ting som tab, newline og backspace) - det første "vanlige" tegnet er mellomrom på 32.

 

Det finnes forsåvidt andre standarder - IBM har EBCDIC som er moderat sinnsykt - men de har den samme tingen hvor de laveste plassene er kontrolltegn.

 

Rent praktisk er det print-funksjoner (printf, Integer.toString, denslags) som tar seg av å konvertere et tall til en tilsvarende serie med tegn-koder, og parsing-kode (scanf, atoi, Integer.parseInt, osv) som konverterer den andre veien.

 

 

* I disse dager er unicode veldig utbredt, men det er langt fra tilfeldig at tegn 1-127 i US-ASCII er de samme i UTF-8.

Endret av Djn
Lenke til kommentar

Dere svarer virkelig bra her :) takker! :)

 

Jeg har et spørsmål til. Dette er kanskje litt.. domt.. men..

 

Jeg begynner å skjønne toerkomplement. Tror jeg skal klare å regne med toerkomplement osv.

Men det er et tall som forvirrer meg.

 

Hvorfor er -127 = 1000 0001 ???

Det første 1 tallet er jo der for å si at det er et negativt tall ikke sant? Så hvorfor er det ikke -1?

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å
×
×
  • Opprett ny...