"Cześć, Amigo!"
"Cześć, Bilaabo!"
„Chcę ci trochę opowiedzieć o różnych systemach liczbowych”.
„Słyszałeś już, że ludzie używają systemu dziesiętnego. Oto główne fakty dotyczące tego systemu:
1) Do zapisu liczb używa się 10 cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
2) Liczba 543 oznacza 5 setek + 4 dziesiątki + 3 jedności.
„Odpowiada to zapisowi 5*100 + 4*10 + 3*1, co można zapisać jako 5*10 2 + 4*10 1 + 3*10 0 .
Zauważ, że tysiące, setki, dziesiątki i jedności to potęgi liczby 10.
1) Jeden to 10 do potęgi zerowej.
2) Dziesięć to 10 do pierwszej potęgi.
3) Sto to 10 do drugiej potęgi.
4) Tysiąc to 10 do trzeciej potęgi itd.
"Tak. Rozumiem."
„Ale teraz wyobraź sobie, że mamy tylko 8 cyfr. Następnie mamy system ósemkowy. Oto jego główne fakty:”
1) Do zapisu liczb używa się 8 cyfr: 0, 1, 2, 3, 4, 5, 6, 7.
2) Liczba 543 8 oznacza 5*8 2 +4*8 1 +3*8 0 . Innymi słowy, to jest 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10
Napisałem 8 i 10 jako indeksy dolne, aby wskazać, ile cyfr jest używanych do przedstawienia liczby.
„Myślę, że rozumiem. Myślę, że mógłbym przekonwertować liczbę z systemu ósemkowego na dziesiętny. Ale prawdopodobnie nie mogłem pójść w drugą stronę”.
„To nie jest takie trudne. Wyobraź sobie, że musisz użyć kilku ciężarówek, aby przewieźć stos piasku. Masz wywrotki, zwykłe ciężarówki i bardzo małe ciężarówki. Ale ciężarówki nie mogą jechać, jeśli nie są pełne”.
"Jak byś to zrobił?"
„Najpierw zapełniałem wywrotki, bo są największe. Potem, kiedy zobaczyłem, że nie ma wystarczającej ilości piasku do zapełnienia ciężarówki, przesiadałem się na mniejsze pojazdy. A potem jeszcze mniejsze”.
„Tutaj jest bardzo podobnie. Spróbujmy przekonwertować liczbę 355 10 z powrotem na ósemkową”.
„Najpierw dzielimy przez 64 (8 2 ) i otrzymujemy 5 z resztą z 35. Oznacza to, że pierwszą cyfrą naszej liczby jest 5. Następnie dzielimy resztę przez 8 (8 1 ) i otrzymujemy 4 z resztą z 3. W ten sposób otrzymujemy liczbę 543 8 ”.
"Nawiasem mówiąc, możesz też przejść w drugą stronę. W końcu 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Nasze ósemkowe "dziesiątki " i "setki" muszą być podzielone przez 8. Zatem reszta z dzielenia przez 8 będzie naszymi cyframi ósemkowymi."
„Najpierw podzielmy 355 przez 8. Otrzymujemy 44 z resztą 3. To znaczy 355=44*8+3. A 44 można przedstawić jako 5*8+4. Zatem 355= (5*8+ 4)*8+3; Oto nasze cyfry: 5, 4, 3. Liczba, której szukamy to 543 8 ”.
„Myślę, że rozumiem, ale będę musiał trochę poćwiczyć, aby zrozumieć wszystko do końca”.
„Programowanie często polega na używaniu liczb o różnych podstawach (tj. liczbie cyfr używanych w systemie liczbowym). Najpopularniejsze to 2, 8, 10, 16 i 64.”
„Ale dlaczego jest to konieczne? Dlaczego potrzebujemy liczb reprezentowanych przez 2, 8, 16 lub 64 cyfry?”
„Chodzi o to, jak procesor działa wewnętrznie. Bardzo upraszczając, jeśli prąd płynie przez przewód, to mówimy, że ma wartość 1; jeśli nie ma prądu, to jego wartość wynosi 0. Wszystkie liczby są przechowywane w komórkach pamięci. komórki mają bardzo prosty projekt. I mogą przechowywać tylko 0 lub 1”.
„Jednak takie uproszczenie (tylko 0 lub 1) umożliwiło stworzenie bardzo małych elementów wewnątrz procesora i pamięci. Nowoczesne procesory i moduły pamięci zawierają miliardy różnych elementów. A ich powierzchnia często nie przekracza centymetra kwadratowego”.
Teraz już wiem.
„Teraz przechodzimy do liczb binarnych. Tutaj mamy to samo, co w przypadku ósemkowego, tylko łatwiejsze”.
1) Do zapisu liczb używa się 2 cyfr: 0, 1.
2) Liczba 101 2 oznacza 1*2 2 + 0*2 1 + 1*2 0 . Innymi słowy, jest to 1*4+0*2+1*1 =4+1=51 10
„Tak. Pamiętam. Jedna komórka, która może mieć wartość 0 lub 1, nazywa się bitem. Ale nie może przechowywać zbyt wielu informacji, więc są one łączone w grupy po 8. Te grupy nazywane są bajtami. "
„Dokładnie. Bajt to grupa ośmiu bitów. Może przechowywać następujące wartości: 00000000, 00000001, ... 11111111. Wartości te odpowiadają liczbom dziesiętnym 0,1, ... 255. Co daje nam w sumie 256 wartości”.
Jaka jest największa liczba całkowita w Javie? A raczej jaki jest jego typ?
„Długi. Długi składa się z 8 bajtów. Innymi słowy, 64 bitów. Może przechowywać wartości od -2 63 do 2 63 -1.
„Tak. Nie będę poruszał tematu zamiany liczb dziesiętnych na dwójkowe i odwrotnie. W przeciwnym razie lekcja byłaby zbyt długa”.
„Zamiast tego porozmawiajmy trochę więcej o systemie szesnastkowym”.
„Tak, to bardzo interesujące. W systemie dwójkowym i ósemkowym po prostu pozbyliśmy się cyfr, zaczynając odpowiednio od dwóch i ośmiu. Ale co tu robimy? Dodać nowe cyfry?”
„Dokładnie! Spójrz na to:”
1) Do zapisu liczb używa się 16 cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
2) Liczba 543 16 oznacza 5*16 2 + 4*16 1 + 3*16 0 . Innymi słowy, jest to 5*256+4*16+3*1 = 1280+64+3 = 1347 10
„Więc po prostu dodaliśmy litery jako cyfry? O_o”
„Tak. A co w tym wielkiego? Po co wymyślać nowe cyfry, skoro litery działają doskonale? Sprawdź to:”
Cyfra szesnastkowa | Wartość dziesiętna |
---|---|
0 | 0 |
1 | 1 |
8 | 8 |
9 | 9 |
A | 10 |
B | 11 |
C | 12 |
D | 13 |
mi | 14 |
F | 15 |
„Nie zamierzam też mówić o konwersji z dziesiętnego na szesnastkowy. Ale oto jeden interesujący fakt. Cyfra szesnastkowa jest reprezentowana przez dokładnie 4 bity, z wartościami od 0 do 15. Tak więc jeden bajt można zapisać za pomocą ośmiu cyfr binarnych (0 lub 1) lub dwie cyfry szesnastkowe."
„Oto przykład:”
Liczba dziesiętna | Liczba binarna | Liczba szesnastkowa |
---|---|---|
0 | 0000 0000 | 00 |
1 | 0000 0001 | 01 |
15 | 0000 1111 | 0f |
16 | 0001 0000 | 10 |
31 | 0001 1111 | 1 f |
32 | 0010 0000 | 20 |
128 | 1000 0000 | 80 |
129 | 1000 0001 | 81 |
255 | 1111 1111 | ff |
„Reprezentację szesnastkową można łatwo przekonwertować na binarną (i odwrotnie). Dlatego wewnętrzna reprezentacja bajtowa liczby rzadko jest podawana w postaci binarnej (przy użyciu zer i jedynek) w programowaniu. Byłoby to zbyt długie i trudne do zrozumienia. Notacja szesnastkowa jest o wiele bardziej czytelny i zwięzły”.
— Zgadzam się. Nawet mi się podobało.
„Nawiasem mówiąc, Java pozwala zapisywać liczby w różnych systemach liczbowych bezpośrednio w kodzie:”
Baza | Cecha wyróżniająca | Przykłady | Nieprawidłowe numery |
---|---|---|---|
2 | 0b na początku numeru | 0b 00001111 | 0b 11111 2 1 |
8 | 0 na początku numeru | 0 1234343 | 0 12 8 |
10 | Nic | 95459 | 909 za |
16 | 0x na początku numeru | 0x 10ff | 0x 1c gh |
„Doskonała lekcja. Dziękuję, Bilaabo”.
GO TO FULL VERSION