1. Sakkizlik kodirovka
Kodirovkalar haqida gap ketganda. Siz bilganingizdek, kundalik hayotda biz o‘nlik sanoq tizimini ishlatamiz: barcha raqamlarimiz 10 raqamdan iborat: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 10 ta raqam bor, shuning uchun tizim o‘nlik deb ataladi.
Lekin dasturchilar – juda ijodkor odamlar, va darhol boshqa raqamlar soni bilan kodirovkalar o‘ylab topishdi. Masalan, 64, 16, 8 va 2.
8 raqamli kodirovka eng oddiy: ular shunchaki 8 va 9 raqamlarini olib tashlashdi va sakkizlik kodirovkani (sakkizlik sanoq tizimi) olishdi.
Siz, ha-ha, sakkizlik tizimda sonli literallarni belgilash mumkin. Agar, albatta, sizga bu juda kerak bo‘lsa. Bu osonroq ko‘rinadi. Faqat son oldida 0 raqamini qo‘yish kerak.
Boshqacha aytganda, Java uchun 0 bilan boshlanadigan har qanday butun sonli literal sakkizlik sifatida qabul qilinadi.
Misollar:
| Kod | Izohlar |
|---|---|
|
x 13 ga teng: 1*8+5 |
|
x 21 ga teng: 2*8+5 |
|
x 83 ga teng: 1*64+2*8+3 == 1*82+2*81+3*80 |
|
Kompilyatsiya xatosi: sakkizlik kodirovkada 8 raqami yo‘q. |
Sizga ehtimol kodda sakkizlik raqamlarni yozishingiz kerak bo‘lmasligi mumkin, ammo siz nima ekanligini bilishingiz kerak. Axir, boshqa odamlar tomonidan yozilgan kodni o‘qishingiz kerak bo‘ladi. Va yuqorida aytilganidek, dasturchilar – juda ijodkor odamlar.
Eslatib o‘tish uchun, sonning oldiga shunchaki 0 yozish mumkin emas.
2. Ikkilik kodirovka
Ikkilik kodirovka yana ham qiziqarli. Agar sakkizlikda bizda faqat 0-7 raqamlar qolgan bo‘lsa, ikkilikda faqat 0 va 1 raqamlar qoldi. Nima uchun bunday kodirovka kerak?
Hammasi kompyuter qurilishida. Kompyuterda hamma narsa elektr bilan ishlaydi, va eng samarali narsa nima saqlash va uzatish uchun ikkita holatni ishlatish ekanligi ma'lum bo‘ldi: simda elektr yo‘q (nol) va elektr mavjud (bir).
Shunday qilib, ikkilik kodirovkaning mashhurligi shundan chiqdi.
Aslida Java-da u unchalik ko‘p ishlatilmaydi: Java yuqori darajali til deb hisoblanadi, ishlayotgan apparatdan to‘liq abstraxlangan. Darhaqiqat: ma'lumotlar qanday saqlanishi va qayta ishlanishi sizga farqi yo‘qmi?
Lekin o‘tgan asrlar davomida dasturchilar ikkilik kodirovkani (va unga asoslangan kodirovkalarni) yoqtirib qolishdi, shuning uchun Java-da raqamning ikkilik shaklini hisobga oladigan operatorlar mavjud. Hatto real sonlarning aniqligi ham ularning ikkilik kodirovkasidagi tasvirlanishiga bog‘liq.
Umuman, bu kodirovka haqida bilish yaxshiroq.
Va Java-da, sakkizlik kodirovka bilan bo'lgani kabi, ikkilik kodirovkada literallarni belgilash usuli mavjud. Ya'ni, faqat 0 va 1 belgilaridan tashkil topgan. Java-kompilyator kodda ikkilik kodirovkada sonli literal yozilganligini tushunishi uchun, barcha ikkilik literallar 0b prefiksi bilan boshlanadi (b binary so‘zidan).
Misollar:
| Kod | Izohlar |
|---|---|
|
x 4 ga teng: 1*4+0*2+0 |
|
x 15 ga teng: 1*8+1*4+1*2+1 |
|
x 967 ga teng: 1*29+1*28+1*27+1*26+0*25+0*24+0*23+1*22+1*2+1; |
|
Kompilyatsiya xatosi: ikkilik kodirovkada 2 raqami yo‘q. |
3. O‘n oltilik kodirovka
Sakkizlik va ikkilik kodirovkalardan tashqari, literallarni o‘n oltilik tizimda ham yozish mumkin. Bu juda mashhur kodirovka.
Hammasi shundaki, ikkilik yozuv haqiqiy saqlash ko‘rinishi uchun maksimal darajada yaqin bo‘lishiga qaramay, inson uchun bunday son bilan ishlash juda qiyin: million 7 raqam o‘z ichiga olmaydi, balki 20 raqamni.
Shuning uchun dasturchilar o‘n oltilik tizimni o‘ylab topishdi. Chunki 16 - bu 24, shuning uchun har bir 16-lik raqam to‘liq 4 bitga to‘g‘ri keladi. Oddiy qilib aytganda, endi har 4 bit bitta o‘n oltilik raqam bilan ifodalanishi mumkin.
O‘n oltilik kodirovkada o‘ziga xos prefiks ham bor — 0x. Misollar:
| O‘nlik raqam | Ikkilik yozuv | O‘n oltilik yozuv |
|---|---|---|
| 17 | 0b00010001 | 0x11 |
| 41 | 0b00101001 | 0x29 |
| 85 | 0b01010101 | 0x55 |
| 256 | 0b100000000 | 0x100 |
Yaxshi, siz so‘raysiz, bilamiz, sakkizlik tizimni qanday olish mumkin: shunchaki 8 va 9 raqamlarini tashlab qo‘ydik, lekin o‘n oltilik tizim uchun kerak bo‘lgan 6 raqamni qayerdan olish mumkin? Ularni ko‘rishni xohlar edik!
Bu juda oddiy ish. O‘n oltilik tizimning yo‘q raqamlariga ingliz alifbosining 6 birinchi harfi olindi: A (10), B (11), C (12), D (13), E (14), F (15).
Misollar:
| O‘n oltilik yozuv | Ikkilik yozuv | O‘nlik raqam |
|---|---|---|
| 0x1 | 0b00000001 | 1 |
| 0x9 | 0b00001001 | 9 |
| 0xA | 0b00001010 | 10 |
| 0xB | 0b00001011 | 11 |
| 0xC | 0b00001100 | 12 |
| 0xD | 0b00001101 | 13 |
| 0xE | 0b00001110 | 14 |
| 0xF | 0b00001111 | 15 |
| 0x1F | 0b00011111 | 31 |
| 0xAF | 0b10101111 | 175 |
| 0xFF | 0b11111111 | 255 |
| 0xFFF | 0b111111111111 | 4095 |
4. Qanday qilib o‘n oltilik kodirovkadagi sonni o‘nlikka o‘girish
O‘n oltilikdan o‘nlik sanoq tizimiga sonni o‘girish juda oson. Aytaylik, sizda 0xAFCF soni bor. O‘nlikda bu nechiga teng?
Birinchidan, bizda pozitsion sanoq tizimi bor, va har bir sanoq raqami ma'lum qiymatni 16 marta oshiradi:
A*163 + F*162 + C*161 + F
A harfi 10 ga, C harfi 12 ga, F harfi – o‘n beshga mos keladi. Natijani olamiz:
10*163 + 15*162 + 12*161 + 15
16 ni darajaga oshiramiz va natijani olamiz:
10*4096 + 15*256 + 12*16 + 15
Hammasini qo‘shamiz va natijani olamiz:
45007
Endi siz bu son qanday saqlanishini bilasiz:
0xAFCF
Endi uni ikkilik kodirovkaga o‘giramiz. Ikkilikda bu:
0b1010111111001111
Har to‘rtta bit aniq bir o‘n oltilik kodirovka belgisiga to‘g‘ri keladi. Juda qulay. Hech qanday ko‘paytirish va darajalarga oshirishlarsiz.
GO TO FULL VERSION