Notation for binære tal som 1000100B - 1

"Hej, Amigo!"

"Hej, Bilaabo!"

"Jeg vil gerne fortælle dig lidt om forskellige nummersystemer."

"Du har allerede hørt, at folk bruger decimalsystemet. Her er de vigtigste fakta om dette system:

1)  10 cifre bruges til at skrive tal: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Tallet 543 betyder 5 hundrede + 4 tiere + 3 enere.

"Dette svarer til at skrive 5*100 + 4*10 + 3*1, som kan skrives som 5*10 2 + 4*10 1 + 3*10 0 .

Bemærk, at tusinder, hundreder, tiere og enere er potenser af tallet 10.

1) Én er 10 til den nulte potens.

2)  Ti er 10 i første potens.

3) Hundrede er 10 i anden potens.

4)  Tusind er 10 i tredje potens osv.

"Jep. Forstår det."

"Men forestil dig nu, at vi kun har 8 cifre. Så har vi det oktale system. Her er dets vigtigste fakta:"

1)  8 cifre bruges til at skrive tal: 0, 1, 2, 3, 4, 5, 6, 7.

2)  Tallet 543 8 betyder 5*8 2 +4*8 1 +3*8 0 . Med andre ord, det er 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Jeg skrev 8 og 10 som underskrift for at angive, hvor mange cifre der bruges til at repræsentere tallet.

"Jeg tror, ​​jeg forstår det. Jeg tror, ​​jeg kunne konvertere et tal fra oktalsystemet til decimal. Men jeg kunne nok ikke gå den anden vej."

"Det er ikke så svært. Forestil dig, at du skal bruge flere lastbiler til at flytte en bunke sand. Du har dumpere, almindelige lastbiler og meget små lastbiler. Men lastbilerne kan ikke køre, hvis de ikke er fyldte."

"Hvordan ville du gøre det?"

"Først ville jeg fylde dumpere op, da de er de største. Så, da jeg så, at der ikke var sand nok til at fylde lastbilen, ville jeg skifte til de mindre køretøjer. Og så de endnu mindre."

"Det er faktisk meget ens her. Lad os prøve at konvertere tallet 355 10 tilbage til oktal."

"Først dividerer vi det med 64 (8 2 ) og får 5 med en rest på 35. Det betyder, at det første ciffer i vores tal er 5. Så dividerer vi resten med 8 (8 1 ) og får 4 med en rest af 3. Således får vi tallet 543 8 ."

"Du kan i øvrigt også bevæge dig i den anden retning. Efter alt, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Vores oktale "tiere " og "hundreder" skal divideres med 8. Derfor vil resten af ​​divisionen med 8 være vores oktale cifre."

"Lad os først dividere 355 med 8. Vi får 44 med en rest på 3. Det vil sige 355=44*8+3. Og 44 kan repræsenteres som 5*8+4. Således 355= (5*8+ 4)*8+3; Her er vores cifre: 5, 4, 3. Det tal, vi leder efter, er 543 8 ."

"Jeg tror, ​​jeg forstår det, men jeg bliver nødt til at øve mig lidt for at forstå alt hele vejen."

"Programmering indebærer ofte brug af tal med forskellige baser (dvs. antallet af cifre, der bruges i nummereringssystemet). De mest populære er 2, 8, 10, 16 og 64."

"Men hvorfor er det nødvendigt? Hvorfor har vi brug for tal repræsenteret med 2, 8, 16 eller 64 cifre?"

"Det handler om, hvordan processoren fungerer internt. Meget forenklet, hvis der strømmer strøm gennem en ledning, så siger vi, at dens værdi er 1; hvis der ikke er strøm, så er dens værdi 0. Alle tal er gemt i hukommelsesceller. Disse celler har et meget grundlæggende design. Og de kan kun gemme 0 eller 1."

"Men en sådan forenkling (kun 0 eller 1) gjorde det muligt at gøre elementer inde i processoren og hukommelsen meget små. Moderne processorer og hukommelsesmoduler omfatter milliarder af forskellige elementer. Og deres areal er ofte ikke mere end en kvadratcentimeter."

"Wow. Nu ved jeg det."

"Nu vender vi os til binære tal. Her har vi det samme som med oktal, kun lettere."

1)  2 cifre bruges til at skrive tal: 0, 1.

2)  Tallet 101 2 betyder 1*2 2 + 0*2 1 + 1*2 0 . Med andre ord, det er 1*4+0*2+1*1 =4+1=51 10

"Ja. Det kan jeg huske. En celle, som kan have en værdi på enten 0 eller 1, hedder lidt. Men den kan ikke gemme ret meget information, så de er kombineret i grupper på 8. Disse grupper kaldes bytes. "

"Nøjagtigt. En byte er en gruppe på otte bit. Den kan gemme følgende værdier: 00000000, 00000001, ... 11111111. Disse værdier svarer til decimaltallene 0,1, ... 255. Hvilket giver os i alt 256 værdier."

Hvad er det største heltal i Java? Eller rettere, hvad er dens type?

"En lang. En lang består af 8 bytes. Med andre ord 64 bit. Den kan gemme værdier fra -2 63 op til 2 63 -1.

"Jep. Jeg vil ikke komme ind på, hvordan man konverterer tal fra decimal til binær eller omvendt. Ellers ville lektionen blive for lang."

"Lad os i stedet tale lidt mere om det hexadecimale system."

"Ja, det er meget interessant. For de binære og oktale systemer er vi simpelthen sluppet af med cifre, startende med henholdsvis to og otte. Men hvad gør vi her? Tilføj nye cifre?"

"Nøjagtigt! Se her:"

1) 16 cifre bruges til at skrive tal: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Tallet 543 16 betyder 5*16 2 + 4*16 1 + 3*16 0 . Med andre ord, det er 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Så vi har lige tilføjet bogstaver som cifre? O_o"

"Jep. Og hvad er den store sag? Hvorfor opfinde nye tal, når bogstaver fungerer perfekt? Tjek det ud:"

Hexadecimalt ciffer Decimalværdi
0 0
1 1
8 8
9 9
EN 10
B 11
C 12
D 13
E 14
F 15

"Jeg vil heller ikke tale om at konvertere fra decimal til hexadecimal. Men her er en interessant kendsgerning. Et hexadecimalt ciffer er repræsenteret af præcis 4 bit, med værdier fra 0 til 15. Så en byte kan skrives med otte binære cifre (0 eller 1) eller to hexadecimale cifre."

"Her er et eksempel:"

Decimaltal Binært tal Hexadecimalt tal
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
16 0001 0000 10
31 0001 1111 1f
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 ff

"Den hexadecimale repræsentation konverteres let til binær (og omvendt). Det er derfor, den interne byte-repræsentation af et tal sjældent gives i binær (ved hjælp af 0'er og 1'er) i programmering. Det ville være for langt og svært at forstå. Hexadecimal notation er meget mere læsbar og kompakt."

"Jeg er enig. Selv jeg kunne lide det."

"Java lader dig i øvrigt skrive tal i forskellige nummersystemer direkte i koden:"

Grundlag Kendetegn Eksempler Ugyldige tal
2 0b  i begyndelsen af ​​tallet 0b 00001111 0b 11111 2 1
8 0  i begyndelsen af ​​tallet 0 1234343 0 12 8
10 Ingen 95459 909 a
16 0x  i begyndelsen af ​​nummeret 0x 10ff 0x 1c gh

"Fremragende lektion. Tak, Bilaabo."