1. Octal encoding

Sa pagsasalita ng mga pag-encode... Tulad ng alam mo, sa pang-araw-araw na buhay ay gumagamit kami ng decimal notation : ang lahat ng aming mga numero ay kinakatawan gamit ang 10 simbolo: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Mayroong 10 numerals, kaya ang sistema ay tinatawag na decimal.

Ngunit ang mga programmer ay mga big-time na imbentor. Agad silang nakaisip ng mga encoding na gumagamit ng ibang bilang ng mga simbolo. Halimbawa, 16, 8 at 2.

Ang alternatibong encoding na gumagamit ng 8 simbolo ay ang pinakamadali: i-drop lang ang 8 at 9 at makakakuha ka ng octal encoding (ang octal numeral system ).

At, oo, maaari mong gamitin ang octal system upang tukuyin ang mga literal na numero. Kung, siyempre, kailangan mo talaga. Ito ay mas madali kaysa ito tunog. Kailangan mo lang isulat ang numero 0 bago ang numero.

Sa madaling salita, tinatrato ng Java ang anumang integer literal na nagsisimula sa 0 bilang isang octal na halaga.

Mga halimbawa:

Code Mga Tala
int x = 015; 
ang x ay 13: 1*8+5
int x = 025; 
ang x ay 21: 2*8+5
int x = 0123; 
x ay 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Hindi ito mag-compile: 8 ay hindi isa sa mga simbolo na ginamit sa octal encoding.

Hindi malamang na kakailanganin mong magsulat ng mga octal na numero sa iyong code, ngunit dapat mong malaman kung ano ang mga ito. Pagkatapos ng lahat, kailangan mong basahin ang code na isinulat ng iba. At tulad ng nabanggit sa itaas, ang mga programmer ay malalaking imbentor.

Buweno, tandaan na hindi mo basta-basta masusulat ang 0 sa harap ng bawat numero.



2. Binary encoding

Ang binary encoding ay mas kawili-wili. Kung ang octal ay may mga digit lamang na 0-7, ang binary ay mayroon lamang 0 at 1. Bakit kailangan ang encoding na ito?

Ito ay may kinalaman sa panloob na istraktura ng isang computer. Lahat ng bagay sa isang computer ay tumatakbo sa kuryente, at habang nangyayari ito, ang pinaka-epektibong paraan upang mag-imbak at magpadala ng isang bagay gamit ang kuryente ay ang paggamit ng dalawang estado: alinman sa walang kuryente sa wire (zero) at may kuryente (isa).

Ito ang pinagmulan ng katanyagan ng binary numeral system.

Sa prinsipyo, hindi ito madalas na ginagamit sa Java: Ang Java ay itinuturing na isang mataas na antas ng wika, ganap na nakuha mula sa hardware na pinapatakbo nito. Sa katunayan, mahalaga ba sa iyo kung anong format ang ginagamit upang mag-imbak at magproseso ng data sa loob ng isang computer?

Ngunit sa nakalipas na mga dekada, nagustuhan ng mga programmer ang binary encoding (at iba pang mga encoding batay dito). Bilang resulta, may mga operator ang Java na kumukuha ng mga binary na numero bilang mga input. At ang katumpakan ng mga floating-point na numero ay nakasalalay sa kanilang binary na representasyon.

Sa pangkalahatan, mas mabuting malaman mo ang tungkol sa pag-encode na ito kaysa sa hindi mo alam.

At tulad ng nangyari sa octal encoding, ang Java ay may paraan para mag-encode ng mga literal gamit ang binary system. Ibig sabihin, ang mga literal ay binubuo lamang ng 0s at 1s. Upang maunawaan ng Java compiler na ang code ay naglalaman ng isang numeric literal na naka-encode sa binary sa halip na isang decimal na numero na binubuo ng mga zero at isa, lahat ng binary literal ay nakikilala gamit ang prefix na 0b (ang 'b' ay nagmula sa salitang binary) .

Mga halimbawa:

Code Mga Tala
int x = 0b100; 
х ay 4: 1*4+0*2+0
int x = 0b1111; 
х ay 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х ay 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;
Hindi ito mag-compile: 2 ay hindi isa sa mga simbolo na ginamit sa binary encoding.


3. Hexadecimal encoding

Bilang karagdagan sa octal at binary encodings, ang mga literal ay maaari ding isulat sa hexadecimal. Ito ay isang napaka-tanyag na encoding.

Iyon ay dahil bagama't ang binary notation ay mas malapit hangga't maaari sa kung paano aktwal na iniimbak ang mga numero, napakahirap para sa mga tao na epektibong magtrabaho sa mga naturang numero: sa binary, ang bilang na isang milyon ay naglalaman ng 20 digit, hindi 7.

Iyon ang dahilan kung bakit ang mga programmer ay dumating sa hexadecimal system. Pagkatapos ng lahat, ang 16 ay 2 na itinaas sa ika-4 na kapangyarihan, kaya ang eksaktong 4 na bit ay tumutugma sa isang hexadecimal digit. Sa halos pagsasalita, ang bawat 4 na bit ay maaari na ngayong isulat bilang isang solong hexadecimal digit.

Ang hexadecimal encoding ay mayroon ding sarili nitong natatanging prefix: 0x . Mga halimbawa:

Desimal na numero Binary notation Hexadecimal notation
17 0b 0001 0001 0x 11 _
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, sabi mo, sapat na malinaw kung paano namin nakuha ang octal system: itinapon lang namin ang mga numero 8 at 9, ngunit saan namin makukuha ang 6 na dagdag na simbolo para sa hexadecimal system? Gusto ko silang makita!

Diretso lang lahat. Ang unang 6 na titik ng alpabetong Ingles ay kinuha bilang 6 na nawawalang simbolo: A (10), B (11), C (12), D (13), E (14), F (15).

Mga halimbawa:

Hexadecimal notation Binary notation Desimal na numero
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. Paano i-convert ang isang numero mula sa hexadecimal

Ang pag-convert ng isang numero mula sa hexadecimal patungo sa decimal ay napakadali. Sabihin nating mayroon kang numerong 0 x A F C F . Magkano yan sa decimal?

Una, mayroon kaming positional number system, na nangangahulugang ang kontribusyon ng bawat digit sa kabuuang bilang ay tataas ng factor na 16 habang lumilipat kami mula kanan pakaliwa:

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

Ang simbolo A ay tumutugma sa numero 10, ang titik C ay tumutugma sa numero 12, at ang titik F ay kumakatawan sa labinlimang. Nakukuha namin:

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

Pagtaas ng 16 sa iba't ibang kapangyarihan na tumutugma sa mga digit, makukuha natin ang:

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

Binubuo namin ang lahat at nakukuha namin:

45007

Alam mo kung paano iniimbak ang numerong ito sa memorya:

0x A F C F

Ngunit ngayon i-convert natin ito sa binary. Sa binary ito ay magiging:

0b 1010 1111 1100 1111

Ang bawat hanay ng apat na bit ay tumutugma sa eksaktong isang hexadecimal na character. Iyan ay sobrang maginhawa. Nang walang anumang multiplikasyon o exponentiation."