Notasjon for binære tall som 1000100B - 1

"Hei, Amigo!"

"Hei, Bilaabo!"

"Jeg vil fortelle deg litt om forskjellige nummersystemer."

"Du har allerede hørt at folk bruker desimalsystemet. Her er hovedfakta om dette systemet:

1)  10 sifre brukes til å skrive tall: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Tallet 543 betyr 5 hundre + 4 tiere + 3 enere.

"Dette tilsvarer å skrive 5*100 + 4*10 + 3*1, som kan skrives som 5*10 2 + 4*10 1 + 3*10 0 .

Merk at tusener, hundrevis, tiere og enere er potenser av tallet 10.

1) En er 10 til null potens.

2)  Ti er 10 i første potens.

3) Hundre er 10 i andre potens.

4)  Tusen er 10 i tredje potens osv.

"Jepp. Skjønner det."

"Men se for deg at vi bare har 8 sifre. Så har vi det oktale systemet. Her er hovedfakta:"

1)  8 sifre brukes til å skrive tall: 0, 1, 2, 3, 4, 5, 6, 7.

2)  Tallet 543 8 betyr 5*8 2 +4*8 1 +3*8 0 . Med andre ord, det er 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Jeg skrev 8 og 10 som abonnenter for å indikere hvor mange sifre som brukes for å representere tallet.

"Jeg tror jeg forstår det. Jeg tror jeg kunne konvertert et tall fra oktalsystemet til desimal. Men jeg kunne nok ikke gå den andre veien."

"Det er ikke så vanskelig. Tenk deg at du må bruke flere lastebiler for å flytte en haug med sand. Du har dumpere, vanlige lastebiler og veldig små lastebiler. Men lastebilene kan ikke gå hvis de ikke er fulle."

"Hvordan ville du gjort det?"

"Først ville jeg fylt opp dumpere, siden de er de største. Så, når jeg så at det ikke var nok sand til å fylle lastebilen, ville jeg bytte til de mindre kjøretøyene. Og så de enda mindre."

"Det er faktisk veldig likt her. La oss prøve å konvertere tallet 355 10 tilbake til oktal."

«Først deler vi det på 64 (8 2 ) og får 5 med en rest av 35. Dette betyr at det første sifferet i tallet vårt er 5. Deretter deler vi resten med 8 (8 1 ) og får 4 med en rest. av 3. Dermed får vi tallet 543 8 ."

"Du kan forresten også bevege deg i den andre retningen. Tross alt, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Våre oktale "tiere " og "hundrevis" må deles på 8. Derfor vil resten av divisjonen med 8 være våre oktale sifre."

"La oss først dele 355 på 8. Vi får 44 med en rest av 3. Det vil si 355=44*8+3. Og 44 kan representeres som 5*8+4. Dermed 355= (5*8+) 4)*8+3; Her er sifrene våre: 5, 4, 3. Tallet vi ser etter er 543 8 ."

"Jeg tror jeg skjønner det, men jeg må øve meg litt for å forstå alt hele veien."

"Programmering innebærer ofte å bruke tall med forskjellige grunner (dvs. antall sifre som brukes i nummereringssystemet). De mest populære er 2, 8, 10, 16 og 64."

"Men hvorfor er dette nødvendig? Hvorfor trenger vi tall representert med 2, 8, 16 eller 64 sifre?"

"Det handler om hvordan prosessoren fungerer internt. Veldig forenklet, hvis strømmen flyter gjennom en ledning, så sier vi at verdien er 1; hvis det ikke er strøm, så er verdien 0. Alle tall er lagret i minneceller. Disse celler har en veldig grunnleggende design. Og de kan bare lagre 0 eller 1."

"Men en slik forenkling (bare 0 eller 1) gjorde det mulig å gjøre elementer inne i prosessoren og minnet svært små. Moderne prosessorer og minnemoduler inkluderer milliarder av forskjellige elementer. Og arealet deres er ofte ikke mer enn en kvadratcentimeter."

"Wow. Nå vet jeg det."

"Nå går vi over til binære tall. Her har vi det samme som med oktale, bare lettere."

1)  2 siffer brukes til å skrive tall: 0, 1.

2)  Tallet 101 2 betyr 1*2 2 + 0*2 1 + 1*2 0 . Med andre ord, det er 1*4+0*2+1*1 =4+1=51 10

"Ja. Jeg husker. Én celle, som kan ha en verdi på enten 0 eller 1, kalles litt. Men den kan ikke lagre veldig mye informasjon, så de kombineres i grupper på 8. Disse gruppene kalles bytes. "

"Akkurat. En byte er en gruppe på åtte biter. Den kan lagre følgende verdier: 00000000, 00000001, ... 11111111. Disse verdiene tilsvarer desimaltallene 0,1, ... 255. Noe som gir oss totalt 256 verdier."

Hva er det største heltallet i Java? Eller rettere sagt hva er dens type?

"En lang. En lang består av 8 byte. Med andre ord 64 biter. Den kan lagre verdier fra -2 63 opp til 2 63 -1.

"Jepp. Jeg vil ikke komme inn på hvordan man konverterer tall fra desimal til binær eller omvendt. Ellers ville leksjonen blitt for lang."

"I stedet, la oss snakke litt mer om det heksadesimale systemet."

"Ja, det er veldig interessant. For de binære og oktale systemene har vi rett og slett kvittet oss med sifre, og startet med henholdsvis to og åtte. Men hva gjør vi her? Legge til nye sifre?"

"Akkurat! Se på dette:"

1) 16 sifre brukes til å skrive tall: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Tallet 543 16 betyr 5*16 2 + 4*16 1 + 3*16 0 . Med andre ord, det er 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Så vi la bare til bokstaver som sifre? O_o"

"Jepp. Og hva er problemet? Hvorfor finne opp nye tall når bokstaver fungerer utmerket? Sjekk det ut:"

Heksadesimalt siffer Desimalverdi
0 0
1 1
8 8
9 9
EN 10
B 11
C 12
D 1. 3
E 14
F 15

"Jeg skal heller ikke snakke om å konvertere fra desimal til heksadesimal. Men her er et interessant faktum. Et heksadesimalt siffer er representert med nøyaktig 4 biter, med verdier fra 0 til 15. Så en byte kan skrives med åtte binære sifre (0 eller 1) eller to heksadesimale sifre."

"Her er et eksempel:"

Desimaltall Binært tall Heksadesimalt tall
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
16 0001 0000 10
31 0001 1111 1f
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 ff

"Den heksadesimale representasjonen konverteres enkelt til binær (og omvendt). Det er derfor den interne byte-representasjonen av et tall sjelden er gitt i binær (ved bruk av 0-er og 1-er) i programmering. Det ville vært for langt og vanskelig å forstå. Heksadesimal notasjon er mye mer lesbar og kompakt."

"Jeg er enig. Selv jeg likte det."

"Java lar deg forresten skrive tall i forskjellige nummersystemer direkte i koden:"

Utgangspunkt Kjennetegn Eksempler Ugyldige tall
2 0b  i begynnelsen av tallet 0b 00001111 0b 11111 2 1
8 0  i begynnelsen av tallet 0 1234343 0 12 8
10 Ingen 95459 909 a
16 0x  i begynnelsen av tallet 0x 10ff 0x 1c gh

"Utmerket leksjon. Takk, Bilaabo."