"Ora ana sing luwih apik tinimbang coding efektif, Amigo! Percaya karo robot lawas."

"Apa sampeyan ngomong babagan cipher sing digunakake mata-mata?"

"Mesthi ora. Aku ngomong babagan nyedhiyakake informasi ing wangun sing bisa dicerna. Babagan sistem angka. Sampeyan ngerti yen ing saben dinten paling akeh wong nggunakake sistem desimal . Iki nggunakake 10 simbol kanggo makili saben nomer: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ana 10 angka, mula sistem kasebut diarani desimal."

"Sing trep kanggo manungsa kanthi sepuluh driji. Nanging programer minangka penemu wektu gedhe. Dheweke langsung nggawe enkoding sing nggunakake nomer digit sing beda. Contone, 2, 8, 16, utawa 64 digit. Dheweke nindakake iki kanggo nggawe trep kanggo komputer, sing gumantung ing 'ana sinyal / ora ana sinyal'."

"Ah, aku weruh apa sing padha duwe umum ... Kabeh sistem iki adhedhasar kakuwasan loro.

Encoding octal

"Pengamatan sing apik. Ayo diwiwiti kanthi enkoding sing kalebu 8 digit. Manungsa bisa nemokake iki paling gampang: mung nyelehake angka 8 lan 9 lan - boom - sampeyan duwe enkoding oktal (sistem angka ) . ?"

"Ya wis."

"Inggih, surprise! Sampeyan bisa nyetel literal numerik dienkode nggunakake sistem octal. Yen, mesthi, sampeyan pancene kudu. Iku luwih gampang saka muni. Mung sijine 0 ing ngarepe nomer wutuh.

"Dadi yen literal numerik diwiwiti kanthi nol, apa tegese oktal ?"

“Ya, Jawa bakal dianggep oktal.

Tuladha:

Kode Cathetan
int x = 015; 
x punika 13: 1*8+5
int x = 025; 
x punika 21: 2*8+5
int x = 0123; 
x iku 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Iki ora bakal ngumpulake: 8 ora salah siji saka simbol digunakake ing enkoding octal.

"Ora mungkin sampeyan kudu nulis nomer octal ing kode sampeyan, nanging sampeyan kudu ngerti apa iku. "Sawise kabeh, sampeyan kudu maca kode sing ditulis dening wong liya. Lan kaya kasebut ing ndhuwur, programer minangka penemu gedhe.

Elinga yen sampeyan ora bisa nulis 0 ing ngarep saben nomer."

"Nanging yen aku arep dadi oktal, aku bisa?"

“Ya wis.

Encoding biner

"Sanajan sampeyan durung ngerti, enkoding biner iku basa ibumu. Ayo kula ngelingake sampeyan. Yen oktal mung duwe digit 0-7, biner mung 0 lan 1."

"Yagene encoding iki perlu?"

"Kaya sing dakkandhakake ing ndhuwur, iki ana hubungane karo struktur internal komputer. Kabeh ing komputer nganggo listrik, lan kaya sing kedadeyan, cara sing paling efisien kanggo nyimpen lan ngirim barang nggunakake listrik yaiku nggunakake rong negara: ora ana listrik ing kabel (nol) lan ana listrik (siji)."

"Mulane kondhang banget ... Hmm, kayane aku pancen wiwit ngelingi basa iki!"

"Kabeh robot mangertos kanthi sampurna. Sanajan ora asring digunakake ing Jawa. Jawa dianggep minangka basa tingkat dhuwur, sakabehe diabstraksi saka piranti keras sing digunakake. Pancen, sampeyan pancen peduli format apa sing digunakake kanggo nyimpen lan ngolah data. nang komputer?

"Nanging ing pirang-pirang dekade kepungkur, programer wis seneng karo enkoding biner (lan enkoding liyane adhedhasar iku). Akibaté, Jawa duwe operator sing njupuk angka biner minangka input. Lan akurasi angka floating-point gumantung saka binar kasebut. perwakilan.

"Cekak, luwih becik sampeyan ngerti babagan enkoding iki tinimbang ora ngerti."

"Bener. Lan kaya kasus encoding octal, Jawa duwe cara kanggo encode literal nggunakake sistem biner."

"Dadi mung bakal digawe saka 0 lan 1?"

"Persis. Supaya compiler Jawa ngerti yen kode kasebut ngemot literal numerik sing dikode ing binar tinimbang mung angka desimal sing dumadi saka nol lan siji, umume kabeh literal biner diwiwiti kanthi awalan 0b ('b). ' asale saka tembung biner).

Tuladha:

Kode Cathetan
int x = 0b100; 
х iku 4: 1*4+0*2+0
int x = 0b1111; 
х iku 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х punika 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;
Iki ora bakal kompilasi: 2 dudu salah sawijining simbol sing digunakake ing enkoding binar.

Encoding heksadesimal

"Apa loro kanggo daya papat?"

"Nembelas. Sampeyan ngerti pitakonan sing bener kanggo takon robot sing wis tekan aku!"

"Koyone sampeyan wis tekan adoh. Oalah, nembelas. Saliyane enkoding oktal lan biner, literal uga bisa ditulis kanthi heksadesimal. Iki minangka enkoding sing populer banget.

"Sing amarga sanajan notasi binar sabisa-bisa kanggo nyimpen nomer, angel banget kanggo manungsa kanthi efektif nggarap angka kasebut: ing biner, nomer siji yuta 20 digit, dudu 7.

"Mulane programer teka karo sistem heksadesimal. Sawise kabeh, sing bener nyatet, 16 punika 2 wungu kanggo daya 4th, supaya persis 4 bit cocog siji digit heksadesimal.

"Dadi saben 4 bit saiki bisa ditulis ing digit heksadesimal siji."

"Bener. Encoding heksadesimal uga duwe awalan unik dhewe: 0x . Conto:

Nomer desimal Notasi binar Notasi heksadesimal
17 0b 0001 0001 0x11 _ _
4 1 0b 0010 1 00 1 0x2 9 _
85 0b 0101 0101 0x5 5 _
256 0b 1 0000 0000 0x100 _ _ _

"Ok, supaya cukup cetha carane kita entuk sistem octal: kita mung mbuwang nomer 8 lan 9. Nanging ing ngendi kita entuk 6 digit sing ilang kanggo sistem heksadesimal? Aku pengin ndeleng!"

"Iki kabeh langsung. 6 huruf pisanan saka alfabet Inggris dijupuk minangka 6 digit sing ilang: A (10), B (11), C (12), D (13), E (14), F (15) .

Tuladha:

Notasi heksadesimal Notasi binar Nomer desimal
0x1 _ 0b 0000 0001 1
0x9 _ 0b 0000 1001 9
0x A 0b 0000 1010 10
0x b iku 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
0x1 f _ 0b 0001 1111 31
0x A F 0b 1010 1111 175
0x F _ 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095

"Piye carane sampeyan ngowahi angka heksadesimal dadi desimal?"

"Iku prasaja banget. Ayo dadi ngomong sampeyan duwe nomer 0 x A F C F . Pira iku ing desimal? Kaping pisanan, kita duwe sistem nomer posisi, kang tegese kontribusi saben digit kanggo nomer sakabèhé mundhak dening faktor saka 16 nalika kita pindhah saka tengen ngiwa:

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

Simbol A cocog karo nomer 10, huruf C nyatakake yen kita duwe nomer 12, lan huruf F nuduhake limalas. Kita entuk:

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

Ngunggahake 16 menyang macem-macem kekuwatan sing cocog karo digit, kita entuk:

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

Kita nyimpulake kabeh lan entuk:

45007

"Saiki sampeyan ngerti carane 45007 disimpen ing memori."

"Ya, aku. Iku 0x A F C F "

"Saiki ayo diowahi dadi binar. Ing binar bakal dadi:

0b 1010 1111 1100 1111

"Saben set saka patang bit cocog karo persis siji karakter heksadesimal. Iku trep banget. Tanpa perkalian utawa eksponensial."