1. Pengkodean oktal

Berbicara tentang pengkodean... Seperti yang Anda ketahui, dalam kehidupan sehari-hari kita menggunakan notasi desimal : semua angka kita direpresentasikan menggunakan 10 simbol: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ada 10 angka, sehingga sistem ini disebut desimal.

Tetapi pemrogram adalah penemu besar. Mereka segera menemukan pengkodean yang menggunakan jumlah simbol yang berbeda. Misalnya, 16, 8 dan 2.

Pengkodean alternatif yang menggunakan 8 simbol adalah yang termudah: cukup jatuhkan 8 dan 9 dan Anda mendapatkan pengkodean oktal ( sistem angka oktal ).

Dan, ya, Anda dapat menggunakan sistem oktal untuk menentukan literal numerik. Jika, tentu saja, Anda benar-benar membutuhkannya. Ini lebih mudah daripada kedengarannya. Anda hanya perlu menulis angka 0 sebelum angka tersebut.

Dengan kata lain, Java memperlakukan literal bilangan bulat yang dimulai dengan 0 sebagai nilai 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 begitu saja menulis 0 di depan setiap angka.



2. Pengkodean biner

Pengkodean biner bahkan lebih menarik. Jika oktal hanya memiliki digit 0-7, maka biner hanya memiliki 0 dan 1. Mengapa pengkodean ini diperlukan?

Ini ada hubungannya dengan struktur internal komputer. Segala sesuatu di komputer beroperasi dengan listrik, dan seperti yang terjadi, cara paling efisien untuk menyimpan dan mengirimkan sesuatu menggunakan listrik adalah dengan menggunakan dua keadaan: tidak ada listrik di kabel (nol) dan ada listrik (satu).

Inilah asal mula popularitas sistem bilangan biner.

Pada prinsipnya, ini 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 dengan format apa yang digunakan untuk menyimpan dan mengolah data di dalam komputer?

Tetapi selama beberapa dekade terakhir, programmer telah menyukai pengkodean biner (dan pengkodean lain berdasarkan itu). Akibatnya, Java memiliki operator yang menggunakan bilangan biner sebagai input. Dan keakuratan angka floating-point bergantung pada representasi binernya.

Pada dasarnya, lebih baik Anda mengetahui tentang pengkodean ini daripada tidak mengetahuinya.

Dan seperti halnya pengkodean oktal, Java memiliki cara untuk menyandikan literal menggunakan sistem biner. Artinya, literal hanya terdiri dari 0 dan 1. Agar kompiler Java memahami bahwa kode berisi literal numerik yang disandikan dalam biner, bukan sekadar angka desimal yang terdiri dari nol dan satu, semua literal biner diidentifikasi menggunakan 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.


3. Pengkodean heksadesimal

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 berisi 20 digit, bukan 7.

Itu sebabnya programmer datang dengan sistem heksadesimal. Lagi pula, 16 adalah 2 pangkat 4 , jadi tepat 4 bit sesuai dengan satu digit heksadesimal. Secara kasar, setiap 4 bit sekarang dapat ditulis sebagai satu digit heksadesimal.

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, Anda berkata, cukup jelas bagaimana kita mendapatkan sistem oktal: kita hanya membuang angka 8 dan 9, tetapi dari mana kita mendapatkan 6 simbol tambahan untuk sistem heksadesimal? Saya ingin melihat mereka!

Semuanya mudah. 6 huruf pertama alfabet Inggris diambil sebagai 6 simbol 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
0x B 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


4. Cara mengonversi angka dari heksadesimal

Mengubah angka dari heksadesimal ke desimal sangat mudah. Katakanlah Anda memiliki angka 0 x A F C F . Berapa itu dalam desimal?

Pertama, kami memiliki sistem bilangan posisional, yang berarti kontribusi setiap digit ke bilangan keseluruhan bertambah dengan faktor 16 saat kami bergerak dari kanan ke kiri:

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

Simbol A sesuai dengan angka 10, huruf C sesuai dengan 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

Anda tahu bagaimana nomor ini disimpan dalam memori:

0x A F C F

Tapi sekarang mari kita ubah ke biner. Dalam biner itu akan menjadi:

0b 1010 1111 1100 1111

Setiap set empat bit sesuai dengan tepat satu karakter heksadesimal. Itu sangat nyaman. Tanpa perkalian atau eksponensial."