1. Pengekodan oktal

Bercakap tentang pengekodan... Seperti yang anda tahu, dalam kehidupan seharian kita menggunakan tatatanda perpuluhan : semua nombor kita diwakili menggunakan 10 simbol: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Terdapat 10 angka, maka sistem itu dipanggil perpuluhan.

Tetapi pengaturcara adalah pencipta masa yang besar. Mereka segera menghasilkan pengekodan yang menggunakan bilangan simbol yang berbeza. Contohnya, 16, 8 dan 2.

Pengekodan alternatif yang menggunakan 8 simbol adalah yang paling mudah: hanya lepaskan 8 dan 9 dan anda mendapat pengekodan oktal ( sistem angka perlapanan ).

Dan, ya, anda boleh menggunakan sistem oktal untuk menentukan literal angka. Jika, sudah tentu, anda benar-benar perlu. Ia lebih mudah daripada kedengaran. Anda hanya perlu menulis nombor 0 sebelum nombor.

Dalam erti kata lain, Java menganggap mana-mana literal integer bermula dengan 0 sebagai nilai perlapanan.

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 hanya menulis 0 di hadapan setiap nombor.



2. Pengekodan binari

Pengekodan binari adalah lebih menarik. Jika oktal hanya mempunyai digit 0-7, maka binari hanya mempunyai 0 dan 1. Mengapa pengekodan ini perlu?

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 adalah dengan menggunakan dua keadaan: sama ada tiada elektrik dalam wayar (sifar) dan ada elektrik (satu).

Inilah asal usul populariti sistem angka binari.

Pada dasarnya, ia tidak digunakan dengan kerap dalam Java: Java dianggap sebagai bahasa peringkat tinggi, diabstraksi sepenuhnya daripada perkakasan yang dijalankannya. Sesungguhnya, adakah anda benar-benar mengambil berat format yang digunakan untuk menyimpan dan memproses data di dalam komputer?

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

Pada asasnya, adalah lebih baik untuk anda mengetahui tentang pengekodan ini daripada tidak tahu.

Dan seperti yang berlaku dengan pengekodan oktal, Java mempunyai cara untuk mengekod literal menggunakan sistem binari. Iaitu, literal hanya terdiri daripada 0s dan 1s. Agar pengkompil Java memahami bahawa kod tersebut mengandungi literal berangka yang dikodkan dalam binari dan bukannya hanya nombor perpuluhan yang terdiri daripada sifar dan satu, semua literal binari dikenal pasti menggunakan 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.


3. Pengekodan perenambelasan

Selain pengekodan oktal dan binari, literal juga boleh ditulis dalam perenambelasan. Ini adalah pengekodan yang sangat popular.

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

Itulah sebabnya pengaturcara menghasilkan sistem perenambelasan. Lagipun, 16 ialah 2 dinaikkan kepada kuasa ke-4 , jadi betul-betul 4 bit sepadan dengan satu digit heksadesimal. Secara kasarnya, setiap 4 bit kini boleh ditulis sebagai satu digit heksadesimal.

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, anda katakan, sudah cukup jelas bagaimana kita mendapat sistem perlapanan: kita hanya membuang nombor 8 dan 9, tetapi di manakah kita boleh mendapatkan 6 simbol tambahan untuk sistem perenambelasan? Saya ingin melihat mereka!

Semuanya mudah. 6 huruf pertama abjad Inggeris telah diambil sebagai 6 simbol 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


4. Bagaimana untuk menukar nombor daripada perenambelasan

Menukar nombor daripada perenambelasan kepada perpuluhan adalah 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 apabila kita bergerak dari kanan ke kiri:

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

Simbol A sepadan dengan nombor 10, huruf C sepadan dengan 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

Anda tahu bagaimana nombor ini disimpan dalam ingatan:

0x A F C F

Tetapi sekarang mari kita tukarkan 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."