"Tiada yang lebih baik daripada pengekodan yang berkesan, Amigo! Percayai robot lama."

"Adakah anda bercakap tentang sifir yang digunakan oleh pengintip?"

"Sudah tentu tidak. Saya bercakap tentang menyampaikan maklumat dalam bentuk yang boleh dihadam. Mengenai sistem angka. Anda sedar bahawa dalam kehidupan seharian kebanyakan orang menggunakan sistem perpuluhan . Ia menggunakan 10 simbol untuk mewakili setiap nombor: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Terdapat 10 angka, jadi sistem itu dipanggil perpuluhan."

"Itu mudah untuk manusia dengan sepuluh jari mereka. Tetapi pengaturcara adalah pencipta besar. Mereka serta-merta menghasilkan pengekodan yang menggunakan bilangan digit yang berbeza. Contohnya, 2, 8, 16 atau 64 digit. Mereka melakukan ini untuk menjadikannya mudah untuk komputer, yang bergantung pada 'ada isyarat / tiada isyarat'."

“Ah, saya nampak persamaan mereka... Semua sistem ini berdasarkan kuasa dua.

Pengekodan oktal

"Pemerhatian yang baik. Mari kita mulakan dengan pengekodan yang melibatkan 8 digit. Manusia mungkin mendapati ini yang paling mudah: hanya lepaskan nombor 8 dan 9 dan — boom — anda mempunyai pengekodan oktal (sistem berangka). Anda baru-baru ini diberitahu tentang literal , betul ?"

"Ya, saya pernah."

"Nah, terkejut! Anda boleh menetapkan literal berangka yang dikodkan menggunakan sistem perlapanan. Jika, sudah tentu, anda benar-benar perlu. Ia lebih mudah daripada yang didengar. Hanya letakkan 0 di hadapan nombor bulat.

"Jadi jika literal berangka bermula dengan sifar, adakah itu bermakna ia perlapanan ?"

"Ya, Java akan menganggapnya sebagai oktal.

Contoh:

Kod Nota
int x = 015; 
x ialah 13: 1*8+5
int x = 025; 
x ialah 21: 2*8+5
int x = 0123; 
x ialah 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Ini tidak akan menyusun: 8 bukan salah satu simbol yang digunakan dalam pengekodan oktal.

"Tidak mungkin anda perlu menulis nombor perlapanan dalam kod anda, tetapi anda harus tahu apa itu. "Lagipun, anda perlu membaca kod yang ditulis oleh orang lain. Dan seperti yang dinyatakan di atas, pengaturcara adalah pencipta besar.

Nah, ingat bahawa anda tidak boleh pergi dan menulis 0 di hadapan setiap nombor."

"Tetapi jika saya berniat untuk menjadi oktal, maka saya boleh?"

"Ya.

Pengekodan binari

"Walaupun anda masih belum memahaminya, pengekodan binari ialah bahasa ibunda anda. Biar saya ingatkan anda tentangnya. Jika oktal hanya mempunyai digit 0-7, maka binari hanya mempunyai 0 dan 1."

"Mengapa pengekodan ini perlu?"

"Seperti yang saya nyatakan di atas, ini mempunyai kaitan dengan struktur dalaman komputer. Segala-galanya dalam komputer berjalan menggunakan elektrik, dan semasa ia berlaku, cara yang paling berkesan untuk menyimpan dan menghantar sesuatu menggunakan elektrik ialah menggunakan dua keadaan: sama ada tiada elektrik dalam wayar (sifar) dan ada elektrik (satu)."

"Sebab itu ia sangat popular... Hmm, nampaknya saya memang mula ingat bahasa ini!"

"Semua robot memahaminya dengan sempurna. Walaupun ia tidak digunakan terlalu kerap di Jawa. Java dianggap sebagai bahasa peringkat tinggi, diabstrak sepenuhnya daripada perkakasan yang dijalankannya. Sesungguhnya, adakah anda benar-benar mengambil berat format apa yang digunakan untuk menyimpan dan memproses data dalam komputer?

"Tetapi sejak beberapa dekad yang lalu, pengaturcara telah mula menyukai pengekodan binari (dan pengekodan lain berdasarkannya). Akibatnya, Java mempunyai pengendali yang mengambil nombor binari sebagai input. Dan ketepatan nombor titik terapung bergantung pada binari mereka. perwakilan.

"Ringkasnya, adalah lebih baik untuk anda mengetahui tentang pengekodan ini daripada tidak tahu."

"Betul. Dan seperti yang berlaku dengan pengekodan oktal, Java mempunyai cara untuk mengekod literal menggunakan sistem binari."

"Jadi mereka hanya akan terdiri daripada 0s dan 1s?"

"Tepat sekali. Agar pengkompil Java memahami bahawa kod itu mengandungi literal berangka yang dikodkan dalam binari dan bukannya nombor perpuluhan yang terdiri daripada sifar dan satu, adalah kebiasaan untuk semua literal binari bermula dengan awalan 0b ('b ' berasal daripada perkataan binari).

Contoh:

Kod Nota
int x = 0b100; 
х ialah 4: 1*4+0*2+0
int x = 0b1111; 
х ialah 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х ialah 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0*2 3 +1 *2 2 + 1*2+1;
int x = 0b12000;
Ini tidak akan menyusun: 2 bukan salah satu simbol yang digunakan dalam pengekodan binari.

Pengekodan heksadesimal

"Apakah dua kepada kuasa keempat?"

"Enam belas. Anda telah memikirkan soalan yang tepat untuk bertanya kepada robot yang telah sampai kepada saya!"

"Nampaknya anda telah pergi jauh. Bagaimanapun, enam belas. Selain pengekodan oktal dan binari, literal juga boleh ditulis dalam perenambelasan. Ini adalah pengekodan yang sangat popular.

"Itu kerana walaupun notasi binari sedekat mungkin dengan cara nombor sebenarnya disimpan, terlalu sukar bagi manusia untuk bekerja dengan berkesan dengan nombor sedemikian: dalam binari, nombor satu juta 20 digit, bukan 7.

"Itulah sebabnya pengaturcara menghasilkan sistem perenambelasan. Lagipun, seperti yang anda nyatakan dengan betul, 16 ialah 2 dinaikkan kepada kuasa ke-4, jadi betul-betul 4 bit sepadan dengan satu digit heksadesimal.

"Jadi setiap 4 bit kini boleh ditulis dalam satu digit heksadesimal."

"Betul. Pengekodan heksadesimal juga mempunyai awalan uniknya sendiri: 0x . Contoh:

Nombor perpuluhan tatatanda binari Tatatanda heksadesimal
17 0b 0001 0001 0x 1 1
4 1 0b 0010 1 00 1 0x 2 9
85 0b 0101 0101 0x 5 5
256 0b 1 0000 0000 0x 1 0 0

"Ok, jadi sudah cukup jelas bagaimana kita mendapat sistem perlapanan: kita hanya membuang nombor 8 dan 9. Tetapi di manakah kita boleh mendapatkan 6 digit yang hilang untuk sistem perenambelasan? Saya ingin melihatnya!"

"Semuanya mudah. ​​6 huruf pertama abjad Inggeris diambil sebagai 6 digit yang hilang: A (10), B (11), C (12), D (13), E (14), F (15) .

Contoh:

Tatatanda heksadesimal tatatanda binari Nombor perpuluhan
0x 1 0b 0000 0001 1
0x 9 0b 0000 1001 9
0x A 0b 0000 1010 10
0x b 0b 0000 1011 11
0x C 0b 0000 1100 12
0x D 0b 0000 1101 13
0x E 0b 0000 1110 14
0x F 0b 0000 1111 15
0x 1 F 0b 0001 1111 31
0x A F 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095

"Bagaimanakah anda menukar nombor perenambelasan kepada perpuluhan?"

"Ia sangat mudah. ​​Katakan anda mempunyai nombor 0 x A F C F . Berapakah jumlah itu dalam perpuluhan? Pertama, kita mempunyai sistem nombor kedudukan, yang bermaksud sumbangan setiap digit kepada nombor keseluruhan meningkat dengan faktor 16 semasa kita bergerak dari kanan ke kiri:

A * 16 3 + F * 16 2 + C * 16 1 + F

Simbol A sepadan dengan nombor 10, huruf C mengatakan kita mempunyai nombor 12, dan huruf F mewakili lima belas. Kita mendapatkan:

10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15

Menaikkan 16 kepada pelbagai kuasa yang sepadan dengan digit, kita dapat:

10 * 4096 + 15 * 256 + 12 * 16 + 15

Kami merumuskan segala-galanya dan mendapat:

45007

"Sekarang anda tahu bagaimana 45007 disimpan dalam ingatan."

"Ya, saya tahu. Ia adalah 0x A F C F "

"Sekarang mari kita tukar kepada binari. Dalam binari ia akan menjadi:

0b 1010 1111 1100 1111

"Setiap set empat bit sepadan dengan tepat satu aksara heksadesimal. Itu sangat mudah. ​​Tanpa sebarang pendaraban atau eksponen."