A bináris számok jelölése, például 1000100B - 1

– Szia Amigo!

– Szia, Bilaabo!

– Szeretnék egy kicsit mesélni a különböző számozási rendszerekről.

"Már hallottad, hogy az emberek a decimális rendszert használják. Íme a rendszer főbb tényei:

1)  10 számjegyet használnak a számok írásához: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Az 543-as szám 5 százast + 4 tízest + 3 egyest jelent.

"Ez egyenértékű az 5*100 + 4*10 + 3*1 írásával, ami 5*10 2 + 4*10 1 + 3*10 0 formátumban írható fel .

Vegye figyelembe, hogy ezrek, százak, tízesek és egyesek a 10-es szám hatványai.

1) Az egyik 10 a nulladik hatványhoz.

2)  Tíz az első hatvány 10.

3) Száz a 10 a második hatványhoz.

4)  Ezer az 10 a harmadik hatványban stb.

"Igen. Értem."

"De most képzeld el, hogy csak 8 számjegyünk van. Ezután megvan az oktális rendszer. Íme a fő tények:

1)  8 számjegyet használnak a számok írásához: 0, 1, 2, 3, 4, 5, 6, 7.

2) Az 543 8  szám jelentése 5*8 2 +4*8 1 +3*8 0 . Más szavakkal, ez 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

A 8-at és a 10-et alsó indexnek írtam, hogy jelezzem, hány számjegyet használnak a szám ábrázolására.

"Azt hiszem, értem. Azt hiszem, át tudnék konvertálni egy számot az oktális rendszerből decimálissá. De valószínűleg nem tudnék más irányba menni."

"Ez nem olyan nehéz. Képzelje el, hogy több teherautóval kell mozgatnia egy homokhalmot. Vannak billenős teherautók, közönséges teherautók és nagyon kicsi teherautók. De a teherautók nem tudnak menni, ha nincsenek tele."

– Hogyan csinálnád?

"Először a billenős teherautókat tankoltam fel, hiszen azok a legnagyobbak. Aztán amikor láttam, hogy nincs elég homok a kamion megtöltéséhez, átváltottam a kisebb járművekre. Aztán a még kisebbekre."

"Valójában nagyon hasonló itt. Próbáljuk meg visszaváltani a 355 10 számot oktálisra."

"Először elosztjuk 64-gyel (8 2 ), és 5-öt kapunk 35 maradékával. Ez azt jelenti, hogy számunk első számjegye 5. Ezután a maradékot elosztjuk 8-cal (8 1 ), és a maradékkal 4-et kapunk. így kapjuk az 543 8 számot ."

"Mellesleg a másik irányba is lehet mozogni. Hiszen 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Nyolcasunk "tízes " és a "százakat" el kell osztani 8-cal. Így a 8-cal való osztás maradéka a mi oktális számjegyeink lesznek."

"Először osszuk el a 355-öt 8-cal. 44-et kapunk 3 maradékával. Azaz 355=44*8+3. A 44 pedig 5*8+4-ként ábrázolható. Így 355= (5*8+ 4)*8+3; Íme a számjegyeink: 5, 4, 3. A keresett szám: 543 8 ."

– Azt hiszem, értem, de kicsit gyakorolnom kell, hogy mindent megértsek.

"A programozás során gyakran különböző alapú számokat használnak (vagyis a számozási rendszerben használt számjegyek számát). A legnépszerűbbek a 2, 8, 10, 16 és 64."

"De miért van erre szükség? Miért van szükségünk 2, 8, 16 vagy 64 számjegyből álló számokra?"

"Arról van szó, hogyan működik a processzor belülről. Nagyon leegyszerűsítve, ha áram folyik egy vezetéken, akkor azt mondjuk, hogy az értéke 1, ha nincs áram, akkor az értéke 0. Minden szám a memóriacellákban van tárolva. A cellák nagyon egyszerű kialakításúak. Csak 0-t vagy 1-et tudnak tárolni."

"De egy ilyen egyszerűsítés (csak 0 vagy 1) lehetővé tette, hogy a processzoron és a memórián belüli elemeket nagyon kicsinyre tegyék. A modern processzorok és memóriamodulok több milliárd különböző elemet tartalmaznak. A területük pedig gyakran nem haladja meg a négyzetcentimétert."

– Hú. Most már tudom.

"Most a bináris számokra térünk rá. Itt ugyanaz a helyzet, mint az oktálisnál, csak könnyebb."

1)  2 számjegyet használunk a számok írásához: 0, 1.

2) A 101 2  szám jelentése 1*2 2 + 0*2 1 + 1*2 0 . Más szavakkal, ez 1*4+0*2+1*1 =4+1=51 10

"Igen. Emlékszem. Egy cellát, amelynek értéke 0 vagy 1 lehet, bitnek hívnak. De nem tud túl sok információt tárolni, ezért 8-as csoportokba egyesítik őket. Ezeket a csoportokat bájtoknak nevezik. "

"Pontosan. A bájt nyolc bitből álló csoport. A következő értékeket tárolhatja: 00000000, 00000001, ... 11111111. Ezek az értékek a 0,1, ... 255 decimális számoknak felelnek meg. Ez összesen 256 érték."

Mi a legnagyobb egész szám a Java nyelvben? Vagy inkább mi a típusa?

"A long. A long 8 bájtból áll. Más szóval 64 bitből. -2 63 és 2 63 -1 közötti értékeket tárolhat .

"Igen. Nem fogok foglalkozni azzal, hogyan kell a számokat decimálisról binárisra konvertálni, vagy fordítva. Ellenkező esetben túl hosszú lenne a lecke."

– Ehelyett beszéljünk egy kicsit bővebben a hexadecimális rendszerről.

"Igen, ez nagyon érdekes. A bináris és oktális rendszereknél egyszerűen megszabadultunk a számjegyektől, kettővel, illetve nyolczal kezdve. De mit csinálunk itt? Új számjegyeket adunk hozzá?"

"Pontosan! Ezt nézd:"

1) 16 számjegyet használnak a számok írásához: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Az 543 16 szám jelentése 5*16 2 + 4*16 1 + 3*16 0 . Más szavakkal, ez 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Szóval, csak betűket adtunk hozzá számként? O_o"

"Igen. És mi a nagy baj? Miért kell új számokat kitalálni, ha a betűk tökéletesen működnek? Nézd meg:"

Hexadecimális számjegy Tizedes érték
0 0
1 1
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15

"A decimálisról hexadecimálisra való konvertálásról sem fogok beszélni. De itt van egy érdekes tény. Egy hexadecimális számjegyet pontosan 4 bit képvisel, 0 és 15 közötti értékkel. Tehát egy bájt nyolc bináris számjeggyel írható (0 vagy 1) vagy két hexadecimális számjegy."

"Íme egy példa:"

Decimális szám Bináris szám Hexadecimális szám
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

"A hexadecimális ábrázolás könnyen konvertálható binárissá (és fordítva). Ezért a programozásban ritkán adják meg egy szám belső bájtos ábrázolását binárisan (0-t és 1-t használva). Ez túl hosszú lenne és nehezen érthető. Hexadecimális jelölés sokkal olvashatóbb és kompaktabb."

– Egyetértek. Még nekem is tetszett.

"Mellesleg, a Java lehetővé teszi számok beírását különböző számozási rendszerekben közvetlenül a kódba:"

Bázis Megkülönböztető tulajdonság Példák Érvénytelen számok
2 0b  a szám elején 0b 00001111 0b 11111 2 1
8 0  a szám elején 0 1234343 0 12 8
10 Egyik sem 95459 909 a
16 0x  a szám elején 0x 10ff 0x 1c gh

"Kiváló lecke. Köszönöm, Bilaabo."