"Tidak ada yang lebih baik daripada pengodean yang efektif, Amigo! Percayalah pada robot tua."

"Apakah Anda berbicara tentang sandi yang digunakan oleh mata-mata?"

"Tentu saja tidak. Saya berbicara tentang menyajikan informasi dalam bentuk yang dapat dicerna. Tentang sistem angka. Anda tahu bahwa dalam kehidupan sehari-hari kebanyakan orang menggunakan sistem desimal. Menggunakan 10 simbol untuk mewakili setiap angka: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ada 10 angka, jadi sistemnya disebut desimal."

"Itu nyaman bagi manusia dengan sepuluh jari mereka. Tapi pemrogram adalah penemu besar. Mereka segera datang dengan pengkodean yang menggunakan jumlah digit yang berbeda. Misalnya, 2, 8, 16, atau 64 digit. Mereka melakukan ini untuk memudahkan komputer yang mengandalkan 'ada sinyal / tidak ada sinyal'."

"Ah, saya melihat kesamaan mereka... Semua sistem ini didasarkan pada kekuatan dua.

Pengkodean oktal

"Pengamatan yang bagus. Mari kita mulai dengan pengkodean yang melibatkan 8 digit. Manusia mungkin menemukan ini yang paling mudah: cukup hilangkan angka 8 dan 9 dan - boom - Anda memiliki pengkodean oktal (sistem angka). Baru-baru ini Anda diberitahu tentang literal , benar ?"

"Ya saya."

"Wah, kejutan! Anda dapat menyetel literal numerik yang disandikan menggunakan sistem oktal. Jika, tentu saja, Anda benar-benar membutuhkannya. Ini lebih mudah daripada kedengarannya. Letakkan saja 0 di depan bilangan bulat.

"Jadi, jika literal numerik dimulai dengan nol, apakah itu berarti oktal ?"

"Ya, Java akan memperlakukannya sebagai oktal.

Contoh:

Kode Catatan
int x = 015; 
x adalah 13: 1*8+5
int x = 025; 
x adalah 21: 2*8+5
int x = 0123; 
x adalah 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Ini tidak akan dikompilasi: 8 bukan salah satu simbol yang digunakan dalam pengkodean oktal.

"Tidak mungkin Anda perlu menulis angka oktal dalam kode Anda, tetapi Anda harus tahu apa itu. "Bagaimanapun, Anda harus membaca kode yang ditulis oleh orang lain. Dan seperti yang disebutkan di atas, programmer adalah penemu besar.

Nah, ingatlah bahwa Anda tidak bisa pergi dan menulis 0 di depan setiap angka."

"Tetapi jika saya berniat untuk menjadi oktal, apakah saya bisa?"

"Ya.

Pengkodean biner

"Bahkan jika Anda belum memahaminya, pengkodean biner adalah bahasa ibu Anda. Izinkan saya mengingatkan Anda tentang hal itu. Jika oktal hanya memiliki angka 0-7, maka biner hanya memiliki 0 dan 1."

"Mengapa penyandian ini diperlukan?"

"Seperti yang saya sebutkan di atas, ini ada hubungannya dengan struktur internal komputer. Segala sesuatu di komputer berjalan dengan listrik, dan seperti yang terjadi, cara paling efisien untuk menyimpan dan mengirimkan sesuatu menggunakan listrik adalah dengan menggunakan dua keadaan: baik tidak ada listrik di kabel (nol) dan ada listrik (satu)."

"Itulah mengapa ini sangat populer... Hmm, sepertinya aku mulai mengingat bahasa ini!"

"Semua robot memahaminya dengan sempurna. Meskipun tidak terlalu sering digunakan di Java. Java dianggap sebagai bahasa tingkat tinggi, sepenuhnya diabstraksikan dari perangkat keras yang dijalankannya. Memang, apakah Anda benar-benar peduli format apa yang digunakan untuk menyimpan dan memproses data di dalam komputer?

"Tetapi selama beberapa dekade terakhir, pemrogram telah menyukai pengkodean biner (dan pengkodean lain berdasarkan itu). Akibatnya, Java memiliki operator yang menggunakan bilangan biner sebagai input. Dan keakuratan angka titik-mengambang tergantung pada biner mereka perwakilan.

"Singkatnya, lebih baik bagi Anda untuk mengetahui tentang penyandian ini daripada tidak mengetahuinya."

"Benar. Dan seperti halnya pengkodean oktal, Java memiliki cara untuk menyandikan literal menggunakan sistem biner."

"Jadi mereka hanya terdiri dari 0 dan 1?"

"Tepat. Agar kompiler Java memahami bahwa kode berisi literal numerik yang dikodekan dalam biner, bukan hanya angka desimal yang terdiri dari nol dan satu, biasanya semua literal biner dimulai dengan awalan 0b ( ' b ' berasal dari kata biner).

Contoh:

Kode Catatan
int x = 0b100; 
х adalah 4: 1*4+0*2+0
int x = 0b1111; 
х adalah 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х adalah 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 dikompilasi: 2 bukan salah satu simbol yang digunakan dalam pengkodean biner.

Pengkodean heksadesimal

"Berapa pangkat dua pangkat empat?"

"Enam belas. Kamu menemukan pertanyaan yang tepat untuk ditanyakan pada robot yang telah datang sejauh ini kepadaku!"

"Tampaknya Anda telah datang jauh. Ngomong-ngomong, enam belas. Selain pengkodean oktal dan biner, literal juga dapat ditulis dalam heksadesimal. Ini adalah pengkodean yang sangat populer.

"Itu karena meskipun notasi biner sedekat mungkin dengan bagaimana angka sebenarnya disimpan, terlalu sulit bagi manusia untuk bekerja secara efektif dengan angka seperti itu: dalam biner, angka satu juta 20 digit, bukan 7.

"Itulah sebabnya pemrogram membuat sistem heksadesimal. Lagi pula, seperti yang Anda catat dengan benar, 16 sama dengan 2 pangkat 4, jadi tepat 4 bit sesuai dengan satu digit heksadesimal.

"Jadi setiap 4 bit sekarang dapat ditulis dalam satu digit heksadesimal."

"Benar. Pengkodean heksadesimal juga memiliki awalan uniknya sendiri: 0x . Contoh:

Angka desimal Notasi biner Notasi heksadesimal
17 0b 0001 0001 0x 1 1
4 1 0b 0010 1 00 1 0x 2 9
85 0b 0101 0101 0x5 5 _
256 0b 1 0000 0000 0x 1 0 0

"Oke, jadi sudah cukup jelas bagaimana kita mendapatkan sistem oktal: kita membuang angka 8 dan 9. Tapi dari mana kita mendapatkan 6 digit yang hilang untuk sistem heksadesimal? Saya ingin melihatnya!"

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

Contoh:

Notasi heksadesimal Notasi biner Angka desimal
0x1 _ 0b 0000 0001 1
0x 9 0b 0000 1001 9
0x A 0b 0000 1010 10
0xb _ 0b 0000 1011 11
0x C 0b 0000 1100 12
0x D 0b 0000 1101 13
0xE _ 0b 0000 1110 14
0x F 0b 0000 1111 15
0x 1 F 0b 0001 1111 31
0x AF _ 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095

"Bagaimana Anda mengubah angka heksadesimal menjadi desimal?"

"Ini sangat sederhana. Misalkan Anda memiliki angka 0 x A F C F . Berapa nilainya dalam desimal? Pertama, kita memiliki sistem bilangan posisional, yang berarti kontribusi setiap digit ke bilangan keseluruhan bertambah dengan faktor 16 saat kita bergerak dari kanan ke kiri:

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

Simbol A sesuai dengan angka 10, huruf C mengatakan kita memiliki angka 12, dan huruf F mewakili lima belas. Kita mendapatkan:

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

Menaikkan 16 ke berbagai kekuatan yang sesuai dengan angka, kita mendapatkan:

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

Kami meringkas semuanya dan mendapatkan:

45007

"Sekarang kamu tahu bagaimana 45007 disimpan di memori."

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

"Sekarang mari kita ubah ke biner. Dalam biner akan menjadi:

0b 1010 1111 1100 1111

"Setiap rangkaian empat bit sesuai dengan tepat satu karakter heksadesimal. Itu sangat mudah. ​​Tanpa perkalian atau eksponensial apa pun."