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 |
---|---|
|
x ialah 13: 1*8+5 |
|
x ialah 21: 2*8+5 |
|
x ialah 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
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 |
---|---|
|
х ialah 4: 1*4+0*2+0 |
|
х ialah 15: 1*8+1*4+1*2+1 |
|
х 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; |
|
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."