Notatie voor binaire getallen zoals 1000100B - 1

"Hallo Amigo!"

"Hallo Bilaabo!"

"Ik wil je iets vertellen over verschillende nummersystemen."

"Je hebt al gehoord dat mensen het decimale systeem gebruiken. Dit zijn de belangrijkste feiten van dit systeem:

1)  10 cijfers worden gebruikt om getallen te schrijven: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Het getal 543 betekent 5 honderdtallen + 4 tientallen + 3 eenheden.

"Dit komt overeen met het schrijven van 5*100 + 4*10 + 3*1, wat kan worden geschreven als 5*10 2 + 4*10 1 + 3*10 0 .

Merk op dat duizenden, honderden, tientallen en enen machten zijn van het getal 10.

1) Een is 10 tot de nulde macht.

2)  Tien is 10 tot de eerste macht.

3) Honderd is 10 tot de tweede macht.

4)  Duizend is 10 in de derde macht, etc.

"Ja. Begrepen."

"Maar stel je nu voor dat we maar 8 cijfers hebben. Dan hebben we het octale systeem. Dit zijn de belangrijkste feiten:"

1)  8 cijfers worden gebruikt om getallen te schrijven: 0, 1, 2, 3, 4, 5, 6, 7.

2)  Het getal 543 8 betekent 5*8 2 +4*8 1 +3*8 0 . Met andere woorden, het is 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Ik schreef 8 en 10 als subscript om aan te geven hoeveel cijfers worden gebruikt om het nummer weer te geven.

'Ik denk dat ik het snap. Ik denk dat ik een getal van het octale stelsel naar decimaal kan omzetten. Maar de andere kant op zou ik waarschijnlijk niet kunnen.'

"Het is niet zo moeilijk. Stel je voor dat je meerdere vrachtwagens moet gebruiken om een ​​hoop zand te verplaatsen. Je hebt kiepwagens, gewone vrachtwagens en heel kleine vrachtwagens. Maar de vrachtwagens kunnen niet rijden als ze niet vol zijn."

"Hoe zou jij het doen?"

"Eerst zou ik kiepwagens vullen, omdat ze de grootste zijn. Toen ik zag dat er niet genoeg zand was om de vrachtwagen te vullen, schakelde ik over op de kleinere voertuigen. En dan de nog kleinere."

"Het lijkt hier eigenlijk erg op elkaar. Laten we proberen het getal 355 10 terug te zetten naar octaal."

"Eerst delen we het door 64 (8 2 ) en krijgen 5 met een rest van 35. Dit betekent dat het eerste cijfer van ons getal 5 is. Daarna delen we de rest door 8 (8 1 ) en krijgen 4 met een rest van 3. Zo krijgen we het getal 543 8 ."

"Je kunt trouwens ook de andere kant op bewegen. Immers, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Onze octale "tientallen " en "honderdtallen" moeten worden gedeeld door 8. De rest van de deling door 8 zijn dus onze octale cijfers."

"Laten we eerst 355 delen door 8. We krijgen 44 met een rest van 3. Dat wil zeggen, 355=44*8+3. En 44 kan worden weergegeven als 5*8+4. Dus 355= (5*8+ 4)*8+3; Dit zijn onze cijfers: 5, 4, 3. Het nummer dat we zoeken is 543 8 ."

"Ik denk dat ik het snap, maar ik zal een beetje moeten oefenen om alles helemaal te begrijpen."

"Bij het programmeren worden vaak getallen met verschillende basissen gebruikt (dwz het aantal cijfers dat in het nummeringssysteem wordt gebruikt). De meest populaire zijn 2, 8, 10, 16 en 64."

"Maar waarom is dit nodig? Waarom hebben we getallen nodig die worden weergegeven door 2, 8, 16 of 64 cijfers?"

"Het gaat erom hoe de processor intern werkt. Heel simplistisch, als er stroom door een draad vloeit, zeggen we dat de waarde 1 is; als er geen stroom is, is de waarde 0. Alle getallen worden opgeslagen in geheugencellen. Deze cellen hebben een heel eenvoudig ontwerp en ze kunnen alleen 0 of 1 opslaan. "

"Maar zo'n vereenvoudiging (slechts 0 of 1) maakte het mogelijk om elementen in de processor en het geheugen heel klein te maken. Moderne processors en geheugenmodules bevatten miljarden verschillende elementen. En hun oppervlakte is vaak niet meer dan een vierkante centimeter."

"Ho. Nu weet ik het."

"Nu gaan we over op binaire getallen. Hier hebben we hetzelfde als met octaal, alleen eenvoudiger."

1)  2 cijfers worden gebruikt om getallen te schrijven: 0, 1.

2)  Het getal 101 2 betekent 1*2 2 + 0*2 1 + 1*2 0 . Met andere woorden, het is 1*4+0*2+1*1 =4+1=51 10

"Ja. Ik herinner het me. Eén cel, die een waarde van 0 of 1 kan hebben, wordt een bit genoemd. Maar het kan niet veel informatie opslaan, dus worden ze gecombineerd in groepen van 8. Deze groepen worden bytes genoemd. "

"Precies. Een byte is een groep van acht bits. Het kan de volgende waarden opslaan: 00000000, 00000001, ... 11111111. Deze waarden komen overeen met de decimale getallen 0,1, ... 255. Dat geeft ons een totaal van 256 waarden."

Wat is het grootste gehele getal in Java? Of liever wat is het type?

"A long. Een long bestaat uit 8 bytes. Met andere woorden, 64 bits. Het kan waarden opslaan van -2 63 tot 2 63 -1.

"Ja. Ik zal niet ingaan op het omzetten van getallen van decimaal naar binair of vice versa. Anders zou de les te lang worden."

"Laten we in plaats daarvan wat meer praten over het hexadecimale systeem."

"Ja, het is heel interessant. Voor de binaire en octale systemen hebben we de cijfers gewoon weggelaten, beginnend met respectievelijk twee en acht. Maar wat doen we hier? Nieuwe cijfers toevoegen?"

"Precies! Kijk hier eens naar:"

1) 16 cijfers worden gebruikt om getallen te schrijven: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Het getal 543 16 betekent 5*16 2 + 4*16 1 + 3*16 0 . Met andere woorden, het is 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Dus we hebben alleen letters als cijfers toegevoegd? O_o"

"Ja. En wat is het probleem? Waarom nieuwe cijfers verzinnen als letters perfect werken? Kijk eens:"

Hexadecimaal cijfer decimale waarde
0 0
1 1
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15

"Ik ga het ook niet hebben over het converteren van decimaal naar hexadecimaal. Maar hier is een interessant feit. Een hexadecimaal cijfer wordt weergegeven door precies 4 bits, met waarden van 0 tot 15. Dus één byte kan worden geschreven met acht binaire cijfers (0 of 1) of twee hexadecimale cijfers."

"Hier is een voorbeeld:"

Decimaal getal Binair getal Hexadecimaal getal
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

"De hexadecimale weergave kan eenvoudig worden omgezet in binair (en vice versa). Daarom wordt de interne byte-weergave van een getal bij het programmeren zelden in binair gegeven (met nullen en enen). Dat zou te lang en moeilijk te begrijpen zijn. Hexadecimale notatie is veel leesbaarder en compacter."

"Ik ben het ermee eens. Zelfs ik vond het leuk."

"Trouwens, met Java kun je nummers in verschillende nummersystemen rechtstreeks in de code schrijven:"

Baseren Onderscheidend kenmerk Voorbeelden Ongeldige nummers
2 0b  aan het begin van het nummer 0b 00001111 0b 11111 2 1
8 0  aan het begin van het nummer 0 1234343 0 12 8
10 Geen 95459 909 een
16 0x  aan het begin van het nummer 0x 10ff 0x 1c gh

"Uitstekende les. Dank je, Bilaabo."