1. Oktal kodning

Apropos kodninger... Som du ved, bruger vi i hverdagen decimalnotation : alle vores tal er repræsenteret ved hjælp af 10 symboler: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Der er 10 tal, så systemet kaldes decimal.

Men programmører er store opfindere. De kom med det samme op med kodninger, der bruger et andet antal symboler. For eksempel 16, 8 og 2.

Den alternative kodning, der bruger 8 symboler, er den nemmeste: bare slip 8 og 9, og du får en oktal kodning (det oktale talsystem ).

Og ja, du kan bruge det oktale system til at angive numeriske bogstaver. Hvis du selvfølgelig virkelig har brug for det. Det er nemmere end det lyder. Du skal blot skrive tallet 0 før tallet.

Med andre ord behandler Java enhver heltal, der starter med 0, som en oktal værdi.

Eksempler:

Kode Noter
int x = 015;
x er 13:1*8+5
int x = 025;
x er 21:2*8+5
int x = 0123;
x er 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Dette vil ikke kompilere: 8 er ikke et af de symboler, der bruges i den oktale kodning.

Det er usandsynligt, at du skal skrive oktale tal i din kode, men du bør vide, hvad de er. Når alt kommer til alt, bliver du nødt til at læse kode skrevet af andre. Og som nævnt ovenfor er programmører store opfindere.

Husk, at du ikke bare kan skrive 0 foran hvert tal.



2. Binær kodning

Binær kodning er endnu mere interessant. Hvis oktal kun har cifrene 0-7, så har binær kun 0 og 1. Hvorfor er denne kodning nødvendig?

Dette har alt at gøre med den interne struktur af en computer. Alt i en computer kører på elektricitet, og som det sker, er den mest effektive måde at lagre og transmittere noget ved hjælp af elektricitet på at bruge to tilstande: enten er der ingen elektricitet i ledningen (nul), og der er elektricitet (én).

Dette er oprindelsen til populariteten af ​​det binære talsystem.

I princippet bruges det ikke særlig ofte i Java: Java betragtes som et sprog på højt niveau, fuldstændig abstraheret fra den hardware, det kører på. Er du virkelig ligeglad med hvilket format der bruges til at gemme og behandle data inde i en computer?

Men i løbet af de sidste årtier er programmører kommet til at elske den binære kodning (og andre kodninger baseret på den). Som et resultat har Java operatører, der tager binære tal som input. Og nøjagtigheden af ​​flydende kommatal afhænger af deres binære repræsentation.

Grundlæggende er det bedre for dig at vide om denne kodning end ikke at vide.

Og som det var tilfældet med oktal kodning, har Java en måde at kode bogstaver ved hjælp af det binære system. Det vil sige, at bogstaver kun består af 0'ere og 1'ere. For at Java-kompileren skal forstå, at koden indeholder en numerisk literal kodet i binært snarere end blot et decimaltal bestående af nuller og enere, identificeres alle binære literaler ved hjælp af præfikset 0b (' b'et kommer fra ordet binært) .

Eksempler:

Kode Noter
int x = 0b100;
х er 4: 1*4+0*2+0
int x = 0b1111;
х er 15: 1*8+1*4+1*2+1
int x = 0b1111000111;
х er 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;
Dette vil ikke kompilere: 2 er ikke et af de symboler, der bruges i den binære kodning.


3. Hexadecimal kodning

Ud over oktale og binære kodninger kan literaler også skrives i hexadecimal. Dette er en meget populær kodning.

Det skyldes, at selvom binær notation er så tæt som muligt på, hvordan tal faktisk lagres, er det for svært for mennesker effektivt at arbejde med sådanne tal: i binært indeholder tallet en million 20 cifre, ikke 7.

Det er derfor, programmører kom op med det hexadecimale system. 16 er jo 2 hævet til 4. potens, så præcis 4 bit svarer til et hexadecimalt ciffer. Groft sagt kan hver 4 bit nu skrives som et enkelt hexadecimalt ciffer.

Den hexadecimale kodning har også sit eget unikke præfiks: 0x . Eksempler:

Decimaltal Binær notation Hexadecimal notation
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, siger du, det er klart nok, hvordan vi fik det oktale system: vi har lige smidt tallene 8 og 9 ud, men hvor får vi de 6 ekstra symboler for det hexadecimale system? Jeg vil gerne se dem!

Det hele er ligetil. De første 6 bogstaver i det engelske alfabet blev taget som de 6 manglende symboler: A (10), B (11), C (12), D (13), E (14), F (15).

Eksempler:

Hexadecimal notation Binær notation Decimaltal
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. Sådan konverteres et tal fra hexadecimal

Konvertering af et tal fra hexadecimal til decimal er meget let. Lad os sige, at du har tallet 0 x A F C F . Hvor meget er det i decimal?

For det første har vi et positionstalsystem, hvilket betyder, at hvert ciffers bidrag til det samlede tal stiger med en faktor på 16, når vi bevæger os fra højre mod venstre:

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

Symbolet A svarer til tallet 10, bogstavet C svarer til tallet 12, og bogstavet F repræsenterer femten. Vi får:

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

Hæver 16 til de forskellige potenser, der svarer til cifrene, får vi:

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

Vi opsummerer alt og får:

45007

Du ved, hvordan dette nummer er gemt i hukommelsen:

0x A F C F

Men lad os nu konvertere det til binært. I binær vil det være:

0b 1010 1111 1100 1111

Hvert sæt på fire bit svarer til nøjagtigt et hexadecimalt tegn. Det er super praktisk. Uden nogen form for multiplikation eller eksponentiering."