DUGS LOJIDS: Tātad heksadecimālie skaitļi, it kā mums būtu vajadzīga
cita bāzes skaitļu shēma, vai ne?
Lielākā daļa Rietumu kultūru, kā jūs droši vien jau zināt, izmanto
decimālo sistēmu — 10 kā bāzi, lai attēlotu skaitliskos datus.
Mums ir cipari 0, 1, 2, 3, 5, 6, 7, 8, 9.
Un, ja mums ir jāatspoguļo vērtības, kas ir lielākas par deviņām, mēs
varam apvienot šos ciparus, izmantojot vietvērtības jēdzienu.
Tātad attiecībā uz 10 mums ir 1 cipars, kam seko 0, un mēs intuitīvi
saprotam, ka tas, ko mēs tur darām ir, pirmo 1 reizinām ar 10 un pēc
tam pievienojam 0, lai kopā iegūtu 10.
Datori dara kaut ko diezgan līdzīgu, kā jūs droši vien esat pazīstami
ar bināro sistēmu — 2 kā bāzi.
Atšķirība ir tāda, ka ir jāstrādā tikai ar 2 cipariem — 0 un 1.
Un tātad mūsu vietvērtības tā vietā, lai būtu viens, desmit, simts,
tūkstotis, kā tās būtu decimālajā sistēmā, ir viens, divi, četri,
astoņi utt.
Tomēr šī lieta ir tāda, ka šie 0 un 1, it īpaši, ja mēs esam
datorzinātnieki un mēs daudz programmējam vai strādājam ar datoriem,
mēs redzēsim daudz bināro skaitļu.
Un tos 0 un 1 lielās ķēdēs var būt ļoti grūti analizēt .
Mēs nevaram vienkārši aplūkot 0 un 1 virkni un noteikti precīzi
zināt, kas tas ir.
Bet joprojām ir noderīgi, ja var izteikt datus tādā pašā veidā, kā to
dara dators.
Mums ir šāds priekšstats par heksadecimālo sistēmu, kas izmanto 16
kābāzi, nevis 10 vai 2.
Tas nozīmē, ka mums ir jāstrādā ar 16 cipariem, nevis 10 vai 2.
Un tas ir daudz koncentrētāks veids, kā datorsistēmā izteikt bināro
informāciju, tas ir daudz cilvēcīgāk saprotams.
Tātad mums ir cipari no 0 līdz 9, un tad mums ir arī šie papildu seši
cipari - a, b, c, d, e un f, kas apzīmē 10, mūsu jēdzienu 10, 11, 12,
13, 14 un 15, decimāldaļās.
Dažreiz, starp citu, jūs redzēsit arī šos burtus no a līdz f kā
lielos burtus A līdz F, kā es mēdzu to darīt.
Tas ir tikai mans vēlamais stils, taču ir pareizi, tie abi nozīmē
gandrīz vienu un to pašu.
Tātad, kāpēc heksadecimāls ir foršs?
Kāpēc mums ir jāizmanto šī cita papildu bāze?
Mums jau ir 2 un 10, kāpēc mums vajag 16?
Nu 16 ir 2 kāpinājums , un tāpēc katrs heksadecimālais cipars no 0
līdz f atbilst unikālai secībai vai unikālai 4 bināro ciparu 4 bitu
izkārtojumam.
Un šajā ziņā mēs varam izteikt ļoti garus, sarežģītus bināros
skaitļus heksadecimālā veidā daudz koncentrētāk , nezaudējot
informāciju vai neveicot īpaši apgrūtinošus šo skaitļu pārveidojumus.
Tātad, kā es tikko teicu, katrs heksadecimālais cipars atbilst
unikālam 4 bināro ciparu izkārtojumam.
Tātad binārā virkne 0000 atbilst heksadecimālajam ciparam 0.
0110 atbilst heksadecimālajam ciparam 6.
Un 1111 atbilst heksadecimālajam ciparam f.
Ja skatāties uz šo diagrammu, it īpaši, ja skatāties uz diagrammas
kreiso pusi, jūs jau varat redzēt, ka šeit ir neliela neskaidrības
problēma.
Decimālskaitlis 0 gandrīz neatšķiras no heksadecimālās 0, izņemot to,
ka tas atrodas zem kolonnas, kurā ir norādīts heksadecimāls.
Bet mums, iespējams, ne vienmēr būs tā kolonna.
Parasti, izsakot skaitļus heksadecimālajā apzīmējumā, lai skaidri
atšķirtu tos no decimāldaļas, mēs parasti tos prefiksējam ar prefiksu
0x.
0x patiesībā neko nenozīmē, tas ir tikai pavediens mums kā cilvēkiem,
ka tas, ko mēs tūlīt redzēsim vai sāksim analizēt, ir heksadecimāls
skaitlis.
Acīmredzot augstākajiem cipariem a, b, c, d un f, kas atbilst 10–15,
ir diezgan skaidrs, ka tas ir heksadecimālais skaitlis.
Un patiesībā jebkurš heksadecimālais skaitlis, kurā ir burti,
iespējams, ir diezgan skaidrs kā heksadecimālais skaitlis.
Tomēr skaidrības labad vienmēr ir ieteicams pievienot prefiksu katru
reizi, kad atsaucat uz ciparu kā heksadecimālu skaitli, pievienojot
prefiksu 0x.
Tātad binārajam, kā jau teicām, ir vietvērtība. .
Ir vieninieku vieta, divnieku vieta, četrinieku vieta un astotnieku
vieta.
Un decimāldaļās ir arī vietvērtības — vieninieki, desmiti, simti un
tūkstoši, ko mēs visi varam atcerēties no pamatskolas.
Un heksadecimāls šeit tiešām nav izņēmums.
Tam ir arī vietvērtības, bet tā vietā, lai tās būtu kāpinājumi 2 vai
10, tās ir 16.
Tātad mēs redzam šādu skaitli, mēs diezgan skaidri zinām, ka tas ir
397, vai ne?
Ja mēs redzam šādu skaitli, mēs zinām, ka tas vairs nav 397.
Šis ir heksadecimālais skaitlis trīs-deviņi-septiņi.
Tas nav 397, tas nozīmē kaut ko citu, jo mēs izmantojam kāpinājumu 16
kā visas mūsu vietvērtības , nevis kāpinājumus . Faktiski
vietvērtības šeit būtu viena vieta, sešpadsmit vieta un divi simti
piecdesmit. -sešinieku vieta, kas atbilst mūsu priekšstatam par
vieninieku, desmitnieku un simtnieku vietu, ja skaitlis bija 397.
Bet, tā kā tas ir 0x397, mums ir viena vieta, sešpadsmitnieku vieta
un divi simti piecdesmit seši.
Vai arī 16 uz 0 vietu, kas ir 1.
A 16 uz pirmo kāpinājuma vietu, 16.
16 kvadrātu vieta, 256, un tā tālāk, un tā tālāk, un tā tālāk.
Tātad šis skaitlis tiešām ir 3 reizes 16 kvadrātā, plus 9 reizes 16,
plus 7.
Es šeit neskaitīju, bet tas nav 397, tas ir daudz, daudz lielāks par
to.
Tāpat mums varētu būt 0x adc, tas ir reizināts 16 kvadrātā.
Vai arī, ja mēs to pārvēršam mūsu jēdzienā par decimālskaitļiem, tas
ir 10 reizes 16 kvadrātā , plus d reizes 16 vai plus 13 reizes 16.
Un neuztraucieties, ja neesat iegaumējis, ka d ir 13 vai tamlīdzīgi,
šo burtu ciparu nav pārāk daudz, un tas kļūs intuitīvidiezgan ātri.
Tātad tas atkal ir 10 reizes 16 kvadrātā , plus 13 reizes 16, plus
12 reizes 1.
Tātad 0x adc.
Tātad, kā jau teicu, katra 4 bināro ciparu grupa atbilst vienam
heksadecimālajam ciparam, un tāpēc patiesībā ir ļoti viegli mainīt
heksadecimālo un bināro ciparu uz priekšu un atpakaļ.
Ja jums ir šī garā bināro ciparu virkne, viss, kas jums jādara, ir
jāsāk tos grupēt no labās puses uz kreiso kā grupas pa 4.
Un tad jūs varat apvienot tos heksadecimālos skaitļos, nopietni
ierobežojot savā prātā apstrādājamo ciparu skaitu.
32 0 un 1 vietā, kā mēs redzēsim pēc sekundes, jūs varētu to
samazināt līdz tikai 8 heksadecimālajiem cipariem, kas ir daudz
koncentrētāk. .
Diagrammas dažus slaidus atpakaļ palīdzēs jums izdomāt šo kartējumu,
lai gan atkal jūs to iegaumēsit diezgan ātri.
Mēs tūlīt apskatīsim piemēru.
Tātad, ja mums ir šāds skaitlis, šis patiešām lielais binārais
skaitlis vai tas, kas šķiet liels binārs skaitlis.
Un iemesls, kāpēc es to saku, tas vienkārši ir - tas ir milzīgs kā
briesmonis , vai ne?
Tur ir tik daudz 0 un 1.
Bet mums, iespējams, īsti nav nojausmas par to, kāds ir šī skaitļa
lielums.
Mums nav ne jausmas, kā tas atbilstu decimāldaļai.
Un patiesībā mēs šobrīd pat neredzēsim, kam tas atbilst decimāldaļās.
Mēs varētu to izteikt tādā veidā, kas sniegtu mums vairāk
informācijas par to, cik liels ir šis skaitlis.
Tātad, pāriesim pie konvertēšanas procesa.
Pirmā lieta, kas mums jādara, ir tā, ka mēs vēlamies grupēt šos
ciparus grupās pa 4, sākot no labās puses un virzoties uz kreiso
pusi.
Šeit ir 32 cipari, kas nozīmē, ka mums ir jauka tukša vieta no 8
grupām pa 4.
Atcerieties, ka katra 4 grupa šeit unikāli atbilst heksadecimālajam
ciparam.
Tāpēc mēs atkal sāksim veidot savu numuru no labās puses un strādāsim
pa kreisi.
Nu kas ir 1101?
Mēs veicam matemātiku savā galvā, mums ir 1 astotnieku vietā, 1
četrinieku vietā, 0 divnieku vietā un 1 vieninieku vietā.
Tas ir 8 plus 4 plus 1, ko mēs zinām kā 13.
Bet mēs droši vien neizrakstītu 13, jo mēs strādājam ar heksadecimālu.
Mums tas ir jāpārvērš par heksadecimālo ekvivalentu 13, kas ir d.
0011, tas ir 0 astotnieku vietā, 0 četriniekā, 1 divnieku vietā un 1
vieninieku vietā.
Tas ir 3.
Es domāju, turpiniet to darīt vēlreiz, mums ir 9.
Un tad 11, bet tas ir b, atcerieties.
2, 10 — vai a — 6 un 4.
Un tā, ka ļoti liela augšdaļas 0 un 1 virkne tiek precīzāk izteikta
heksadecimālā veidā kā 0x 46a2b93d.
Nu labi, mēs esam apguvuši jaunu foršu prasmi, kāda tam visam jēga?
Mēs, iespējams, neizmantosim to visu laiku, kā mēs drīz to redzēsim,
tomēr mēs kā programmētāji diezgan bieži lietojam heksadecimālus
Ne vienmēr matemātikas nolūkos, bet gan tāpēc, ka mūsu sistēmā
atmiņas adreses bieži tiek attēlotas heksadecimālā formā.
Tas ir ļoti īss veids, kā izteikt citādi apgrūtinošus bināros
skaitļus.
Un tā, atkal, jūs nedrīkstat — jūs, iespējams, nedarīsiet nekādu
matemātiku ar to, jūs nereizināsiet heksadecimālos skaitļus kopā vai
nedarīsiet kaut ko tamlīdzīgu.
Bet tā ir noderīga prasme, lai jūs varētu izteikt un saprast atmiņas
adreses un citus datu izmantošanas veidus C.
Es esmu Dags Loids, šis ir CS50.