Notation för binära tal som 1000100B - 1

"Hej, Amigo!"

"Hej, Bilaabo!"

"Jag vill berätta lite om olika numreringssystem."

"Du har redan hört att folk använder decimalsystemet. Här är de viktigaste fakta om detta system:

1)  10 siffror används för att skriva siffror: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Siffran 543 betyder 5 hundra + 4 tiotal + 3 ettor.

"Detta motsvarar att skriva 5*100 + 4*10 + 3*1, vilket kan skrivas som 5*10 2 + 4*10 1 + 3*10 0 .

Observera att tusentals, hundratals, tiotals och ettor är potenser av talet 10.

1 ) Ett är 10 till nollpotens.

2)  Tio är 10 i första potens.

3) Hundra är 10 i andra potens.

4)  Tusen är 10 i tredje potens osv.

"Japp. Jag förstår."

"Men föreställ dig nu att vi bara har 8 siffror. Sedan har vi det oktala systemet. Här är dess huvudfakta:"

1)  8 siffror används för att skriva siffror: 0, 1, 2, 3, 4, 5, 6, 7.

2)  Siffran 543 8 betyder 5*8 2 +4*8 1 +3*8 0 . Med andra ord, det är 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Jag skrev 8 och 10 som tecknade för att indikera hur många siffror som används för att representera numret.

"Jag tror jag förstår. Jag tror att jag skulle kunna konvertera ett tal från det oktala systemet till decimal. Men jag kunde nog inte gå åt andra hållet."

"Det är inte så svårt. Tänk dig att du behöver använda flera lastbilar för att flytta en hög med sand. Du har dumper, vanliga lastbilar och väldigt små lastbilar. Men lastbilarna kan inte åka om de inte är fulla."

"Hur skulle du göra?"

"Först skulle jag fylla på dumper, eftersom de är störst. Sedan, när jag såg att det inte fanns tillräckligt med sand för att fylla lastbilen, bytte jag till de mindre fordonen. Och sedan de ännu mindre."

"Det är faktiskt väldigt likt här. Låt oss försöka konvertera talet 355 10 tillbaka till oktalt."

"Först delar vi det med 64 (8 2 ) och får 5 med en rest av 35. Det betyder att den första siffran i vårt tal är 5. Sedan dividerar vi resten med 8 (8 1 ) och får 4 med en rest. av 3. Således får vi talet 543 8 ."

"Förresten, du kan också röra dig åt andra hållet. Trots allt, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Våra oktala "tior " och "hundratals" måste delas med 8. Därför kommer resten av divisionen med 8 att vara våra oktala siffror."

"Låt oss först dividera 355 med 8. Vi får 44 med en återstod av 3. Det vill säga 355=44*8+3. Och 44 kan representeras som 5*8+4. Således, 355= (5*8+) 4)*8+3; Här är våra siffror: 5, 4, 3. Siffran vi letar efter är 543 8 ."

"Jag tror att jag förstår det, men jag måste öva lite för att förstå allt hela vägen."

"Programmering innebär ofta att man använder siffror med olika baser (dvs. antalet siffror som används i numreringssystemet). De mest populära är 2, 8, 10, 16 och 64."

"Men varför är detta nödvändigt? Varför behöver vi siffror representerade av 2, 8, 16 eller 64 siffror?"

"Det handlar om hur processorn fungerar internt. Mycket förenklat, om ström flyter genom en tråd, då säger vi att dess värde är 1; om det inte finns någon ström är dess värde 0. Alla siffror lagras i minnesceller. Dessa celler har en mycket grundläggande design. Och de kan bara lagra 0 eller 1."

"Men en sådan förenkling (endast 0 eller 1) gjorde det möjligt att göra element inuti processorn och minnet väldigt små. Moderna processorer och minnesmoduler innehåller miljarder olika element. Och deras area är ofta inte mer än en kvadratcentimeter."

"Wow. Nu vet jag."

"Nu övergår vi till binära tal. Här har vi samma sak som med oktala, bara lättare."

1)  2 siffror används för att skriva siffror: 0, 1.

2)  Siffran 101 2 betyder 1*2 2 + 0*2 1 + 1*2 0 . Med andra ord, det är 1*4+0*2+1*1 =4+1=51 10

"Ja. Jag kommer ihåg. En cell, som kan ha ett värde på antingen 0 eller 1, kallas lite. Men den kan inte lagra särskilt mycket information, så de kombineras till grupper om 8. Dessa grupper kallas bytes. "

"Precis. En byte är en grupp på åtta bitar. Den kan lagra följande värden: 00000000, 00000001, ... 11111111. Dessa värden motsvarar decimaltalen 0,1, ... 255. Vilket ger oss totalt 256 värden."

Vilket är det största heltal i Java? Eller snarare vad är dess typ?

"En lång. En lång består av 8 byte. Med andra ord, 64 bitar. Den kan lagra värden från -2 63 upp till 2 63 -1.

"Japp. Jag kommer inte att beröra hur man konverterar tal från decimal till binär eller vice versa. Annars skulle lektionen bli för lång."

"Låt oss istället prata lite mer om det hexadecimala systemet."

"Ja, det är väldigt intressant. För de binära och oktala systemen blev vi helt enkelt av med siffror, med början på två respektive åtta. Men vad gör vi här? Lägg till nya siffror?"

"Precis! Titta på det här:"

1) 16 siffror används för att skriva siffror: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Siffran 543 16 betyder 5*16 2 + 4*16 1 + 3*16 0 . Med andra ord, det är 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Så, vi har precis lagt till bokstäver som siffror? O_o"

"Japp. Och vad är grejen? Varför uppfinna nya siffror när bokstäverna fungerar alldeles utmärkt? Kolla in det:"

Hexadecimal siffra Decimalvärde
0 0
1 1
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15

"Jag tänker inte heller prata om att konvertera från decimal till hexadecimal. Men här är ett intressant faktum. En hexadecimal siffra representeras av exakt 4 bitar, med värden från 0 till 15. Så en byte kan skrivas med åtta binära siffror (0 eller 1) eller två hexadecimala siffror."

"Här är ett exempel:"

Decimal nummer Binärt tal Hexadecimalt tal
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 1 000 000 80
129 1 000 0001 81
255 1111 1111 ff

"Den hexadecimala representationen konverteras lätt till binär (och vice versa). Det är därför den interna byte-representationen av ett tal sällan ges i binär (med 0:or och 1:or) i programmering. Det skulle vara för långt och svårt att förstå. Hexadecimal notation är mycket mer läsbar och kompakt."

"Jag håller med. Till och med jag gillade det."

"Förresten låter Java dig skriva siffror i olika numreringssystem direkt i koden:"

Bas Utmärkande drag Exempel Ogiltiga nummer
2 0b  i början av numret 0b 00001111 0b 11111 2 1
8 0  i början av numret 0 1234343 0 12 8
10 Ingen 95459 909 a
16 0x  i början av numret 0x 10ff 0x 1c gh

"Utmärkt lektion. Tack, Bilaabo."