Hexadecimal - Hexadecimal

În matematică și calcul , sistemul numeric hexadecimal (de asemenea, baza 16 sau hex ) este un sistem numeric pozițional care reprezintă numere folosind o rază (bază) de 16. Spre deosebire de modul comun de reprezentare a numerelor folosind 10 simboluri, hexadecimala folosește 16 simboluri distincte, cel mai adesea simbolurile „0” - „9” pentru a reprezenta valorile de la 0 la 9 și „A” - „F” (sau alternativ „a” - „f”) pentru a reprezenta valorile de la 10 la 15.

Numeralele hexazecimale sunt utilizate pe scară largă de către proiectanții și programatorii de sisteme informatice, deoarece oferă o reprezentare prietenoasă pentru oameni a valorilor codate binare . Fiecare cifră hexazecimală reprezintă patru biți (cifre binare), cunoscute și sub numele de nibble (sau nybble), care este 1/2 dintr-un octet . De exemplu, un singur octet poate avea valori cuprinse între 00000000 și 11111111 în formă binară, care pot fi reprezentate în mod convenabil ca 00 la FF în hexazecimal.

În matematică, un indiciu este de obicei folosit pentru a specifica baza. De exemplu, valoarea zecimală1.281 ar fi exprimat în hexazecimal ca 501 16 . În programare, un număr de notații sunt utilizate pentru a indica numere hexazecimale, implicând de obicei un prefix sau sufix. Prefixul 0xeste utilizat în C și legate de limbaje de programare, ceea ce ar indica această valoare 0x501.

Hexadecimal este utilizat în codul de transfer Base16 , în care fiecare octet al textului simplu este împărțit în două valori de 4 biți și reprezentat prin două cifre hexazecimale.

Reprezentare

Reprezentare scrisă

În aproape toate utilizările moderne, literele A – F sau a – f reprezintă valorile 10–15, în timp ce numerele 0–9 sunt folosite pentru a-și reprezenta valorile obișnuite.

Nu există o convenție universală pentru a utiliza minuscule sau majuscule, deci fiecare este predominantă sau preferată în anumite medii de către standardele sau convențiile comunitare; se folosește adesea chiar și caz mixt. Afișajele cu șapte segmente utilizează AbCdEF cu carcasă mixtă pentru a crea cifre care pot fi distinse între ele.

Există o anumită standardizare a utilizării spațiilor (mai degrabă decât virgule sau alt semn de punctuație) pentru a separa valorile hexagonale într-o listă lungă. De exemplu, în următoarea descărcare hexagonală fiecare octet de 8 biți este un număr hexagonal de 2 cifre, cu spații între ele, în timp ce decalajul de 32 de biți de la început este un număr hexagonal de 8 cifre.

00000000  57 69 6b 69 70 65 64 69  61 2c 20 74 68 65 20 66  
00000010  72 65 65 20 65 6e 63 79  63 6c 6f 70 65 64 69 61  
00000020  20 74 68 61 74 20 61 6e  79 6f 6e 65 20 63 61 6e 
00000030  20 65 64 69 74 0a

Distingându-se de zecimal

În contexte în care baza nu este clară, numerele hexazecimale pot fi ambigue și confundate cu numerele exprimate în alte baze. Există mai multe convenții pentru exprimarea valorilor fără echivoc. Un indice numeric (în sine scris în zecimal) poate da baza în mod explicit: 159 10 este zecimal 159; 159 16 este hexadecimal 159, care este egal cu 345 10 . Unii autori preferă un indice text, cum ar fi 159 zecimal și 159 hex , sau 159 d și 159 h .

Donald Knuth a introdus utilizarea unui anumit tip de caractere pentru a reprezenta o anumită rază în cartea sa The TeXbook . Reprezentațiile hexazecimale sunt scrise acolo într-un tip de mașină de scris : 5A3

În sistemele de text liniare, cum ar fi cele utilizate în majoritatea mediilor de programare pentru computer, au apărut o varietate de metode:

  • Shell-urile Unix (și conexe), limbajul de asamblare AT&T și, de asemenea, limbajul de programare C (și descendenții săi sintactici precum C ++ , C # , Go , D , Java , JavaScript , Python și Windows PowerShell ) folosesc prefixul 0xpentru constantele numerice reprezentate în hex: 0x5A3. Constantele de caractere și șiruri pot exprima coduri de caractere în hexazecimal cu prefixul \xurmat de două cifre hexazeculare: '\x1B'reprezintă caracterul de control Esc ; "\x1B[0m\x1B[25;1H"este un șir care conține 11 caractere cu două caractere Esc încorporate. Pentru a afișa un întreg ca hexazecimal cu familia de funcții printf , se utilizează codul de conversie a formatului %Xsau %x.
  • În URI-uri (inclusiv URL-uri ), codurile de caractere sunt scrise ca perechi hexazecimale prefixate cu %: http://www.example.com/name%20with%20spacesunde %20este codul pentru caracterul spațial (gol) , codul ASCII punctul 20 în hex, 32 în zecimal.
  • În XML și XHTML , caracterele pot fi exprimate ca referințe de caractere numerice hexazecimale folosind notația , de exemplu, reprezintă caracterul U + 2019 (ghilimele unice din dreapta). Dacă nu există , numărul este zecimal (deci este același caracter).&#xcode;’x’
  • În standardul Unicode , o valoare a caracterelor este reprezentată cu U+urmată de valoarea hexagonală, de exemplu U+20ACeste semnul Euro (€).
  • Referințe de culoare în HTML, CSS și X Window poate fi exprimat cu șase cifre hexazecimale (câte două pentru componentele roșu, verde și albastru, în această ordine) cu prefixul #: alb, de exemplu, este reprezentat #FFFFFF. CSS permite, de asemenea, abrevieri de 3 hexdigit cu un hexdigit pe componentă: # FA3 abreviază # FFAA33 (o portocală aurie:  ).
  • În MIME (extensii de poștă electronică) , codarea tipărită , codurile de caractere sunt scrise ca perechi hexazecimale prefixate cu =: Espa=F1aeste „España” (F1 este codul pentru ñ din setul de caractere ISO / IEC 8859-1).)
  • În limbajele de asamblare derivate de Intel și Modula-2, hexazecimal este notat cu un sufix H sau h : FFhsau 05A3H. Unele implementări necesită un zero principal atunci când primul caracter hexazecimal nu este o cifră zecimală, deci s-ar scrie 0FFhîn loc de FFh. Unele alte implementări (cum ar fi NASM) permit numere în stil C ( 0x42).
  • Alte limbi de asamblare ( 6502 , Motorola ), Pascal , Delphi , unele versiuni ale BASIC ( Commodore ), GameMaker Limba , Godot și Forth folosiți $ca prefix: $5A3.
  • Unele limbaje de asamblare (Microchip) folosesc notația H'ABCD'(pentru ABCD 16 ). În mod similar, Fortran 95 folosește Z'ABCD '.
  • Ada și VHDL anexați cifre hexazecimale în ghilimele bazate pe „numerice“: 16#5A3#. Pentru constantele vectorilor de biți, VHDL folosește notația x"5A3".
  • Verilog reprezintă constante hexazecimale în formă 8'hFF, unde 8 este numărul de biți din valoare și FF este constanta hexazecimală.
  • Limba Smalltalk folosește prefixul 16r:16r5A3
  • PostScript și învelișul Bourne și derivații săi cu prefix hex semnifica 16#: 16#5A3. Pentru PostScript, datele binare (cum ar fi pixelii de imagine ) pot fi exprimate ca perechi hexazecimale consecutive neprefixate: AA213FD51B3801043FBC...
  • Common Lisp folosește prefixele #xși #16r. Setarea variabilelor * read-base * și * print-base * la 16 poate fi, de asemenea, utilizată pentru a comuta cititorul și imprimanta unui sistem Common Lisp la reprezentarea numărului hexazecimal pentru citirea și tipărirea numerelor. Astfel numerele hexazecimale pot fi reprezentate fără codul de prefix #x sau # 16r, când baza de intrare sau ieșire a fost schimbată în 16.
  • Prefix MSX BASIC , QuickBASIC , FreeBASIC și Visual Basic numere hexazecimale cu &H:&H5A3
  • Utilizarea BBC BASIC și Locomotive BASIC& pentru hex.
  • Seria TI-89 și 92 folosește un 0hprefix:0h5A3
  • ALGOL 68 utilizează prefixul 16rnumerelor hexazecimale denote: 16r5a3. Numerele binare, cuaternare (baza-4) și octale pot fi specificate în mod similar.
  • Cel mai comun format pentru hexazecimal pe mainframele IBM ( zSeries ) și computerele midrange ( IBM i ) care rulează sistemul de operare tradițional ( zOS , zVSE , zVM , TPF , IBM i ) este X'5A3'și este utilizat în Assembler, PL / I , COBOL , JCL , scripturi, comenzi și alte locuri. Acest format era obișnuit și pe alte sisteme IBM (și acum învechite). Ocazional s-au folosit ghilimele în locul apostrofelor.
  • Orice adresă IPv6 poate fi scrisă ca opt grupuri de patru cifre hexazecimale (numite uneori hextete ), unde fiecare grup este separat de două puncte ( :). Aceasta, de exemplu, este o adresă IPv6 validă 2001:0db8:85a3:0000:0000:8a2e:0370:7334sau abreviată prin eliminarea zerourilor ca 2001:db8:85a3::8a2e:370:7334( adresele IPv4 sunt de obicei scrise în zecimal).
  • Identificatorii unici la nivel global sunt scrise ca treizeci și două de cifre hexazecimale, adesea în grupări inegale separate prin cratimă, de exemplu 3F2504E0-4F89-41D3-9A0C-0305E82C3301.

Alte simboluri pentru 10-15

Utilizarea literelor de la A la F pentru a reprezenta cifrele de mai sus de 9 nu a fost universală în istoria timpurie a computerelor.

  • În anii 1950, unele instalații, cum ar fi Bendix-14, au preferat utilizarea cifrelor de la 0 la 5 cu o linie generală pentru a indica valorile 10-15 ca 0 , 1 , 2 , 3 , 4 și 5 .
  • SWAC (1950) și Bendix G-15 (1956) calculatoarele folosite litere mici u , v , w , x , y și z pentru valorile la 10 la 15.
  • ILLIAC I (1952) calculator literele majuscule K , S , N , J , F și L pentru valorile la 10 la 15.
  • Librascope LGP-30 (1956) a folosit literele F , G , J , K , Q și W pentru valorile 10-15.
  • Honeywell Datamatic D-1000 (1957) a folosit litere mici b , c , d , e , f și g în timp ce Elbit  100 (1967) a folosit literele majuscule B , C , D , E , F și G pentru valorile 10-15.
  • Monrobot XI (1960) a folosit literele S , T , U , V , W și X pentru valorile la 10 la 15.
  • NEC parametron calculator NEAC 1103 (1960) a folosit literele D , G , H , J , K (și , eventual , V ) pentru valorile de 10-15.
  • Pacific Data Systems 1020 (1964) a folosit literele L , C , A , S , M și D pentru valorile 10-15.
  • Noile simboluri și nume numerice au fost introduse în notația Bibi-binară de Boby Lapointe în 1968. Această notație nu a devenit foarte populară.
Propunerea de notație hexazecimală a lui Bruce Alan Martin
  • Bruce Alan Martin de la Brookhaven National Laboratory a considerat alegerea A-F „ridicolă”. Într-o scrisoare din 1968 adresată editorului CACM , el a propus un set complet nou de simboluri bazate pe locațiile de biți, care nu au obținut prea multă acceptare.
  • Unele cipuri de decodare a afișajului cu șapte segmente (de exemplu, 74LS47) prezintă ieșiri neașteptate datorită logicii concepute doar pentru a produce 0-9 corect.

Reprezentări verbale și digitale

Nu există cifre tradiționale care să reprezinte cantitățile de la zece la cincisprezece - literele sunt folosite ca substitut - și majoritatea limbilor europene nu au nume non-zecimale pentru cifrele de peste zece. Chiar dacă limba engleză are nume pentru mai multe puteri non-zecimale ( pereche pentru prima putere binară , scor pentru prima putere vigesimală , duzină , gros și mare brut pentru primele trei puteri duodecimale ), niciun nume în limba engleză nu descrie puterile hexazecimale (zecimală 16 , 256, 4096, 65536, ...). Unii oameni citesc cifre hexazecimale cifră cu cifră, cum ar fi un număr de telefon, sau folosind alfabetul fonetic NATO , Alfabetul fonetic al armatei / marinei sau un sistem similar ad-hoc . Ca urmare a adoptării hexazecimale în rândul programatorilor IBM System / 360 , Magnuson (1968) a sugerat un ghid de pronunție care să dea nume scurte literelor hexazecimale - de exemplu, „A” a fost pronunțat „ann”, B „pariat”, C "chris" etc. Un alt sistem de denumire a fost elaborat de Babb (2015), în afara unui serial TV ca o glumă. Un alt sistem de denumire a fost publicat online de Rogers (2007), care încearcă să facă reprezentarea verbală diferențiată în orice caz, chiar și atunci când numărul real nu conține numerele A-F. Exemplele sunt listate în tabelele de mai jos.

Schema hexazecimală de numărare a degetelor

Au fost concepute sisteme de numărare pe cifre atât pentru binar cât și pentru hexazecimal. Arthur C. Clarke a sugerat utilizarea fiecărui deget ca un bit on / off, permițând numărarea degetelor de la zero la 1023 10 pe zece degete. Un alt sistem de numărare până la FF 16 (255 10 ) este ilustrat în dreapta.


Metoda de numire Magnusson (1968)
Număr Pronunție
A Ann
B pariu
C chris
D punct
E ernest
F îngheţ
1A ani
A0 annty
5B cincizeci-pariu
A01C Annty Christeen
1AD0 annteen dotty
3A7D treizeci și șaptezeci de puncte

Metoda de numire Rogers (2007)
Număr Pronunție
A zece
B unsprezece
C doisprezece
D nebunie
E eptwin
F fim
10 tex
11 oneteek
1F fimteek
50 fiftek
C0 doisprezece
100 hundrek
1000 thousek
3E thirtek-eptwin
E1 eptek-one
C4A douasprezece-patru-patru-zece
1743 one-thousek-seven-
-hundrek-fourtek-three

Semne

Sistemul hexazecimal poate exprima numere negative la fel ca în zecimal: -2A pentru a reprezenta -42 10 și așa mai departe.

Hexadecimal poate fi, de asemenea, utilizat pentru a exprima modelele de biți exacte utilizate în procesor , astfel încât o secvență de cifre hexazecimale poate reprezenta o valoare semnată sau chiar în virgulă mobilă . În acest fel, numărul negativ −42 10 poate fi scris ca FFFF FFD6 într-un registru CPU pe 32 de biți (în complement de doi ), ca C228 0000 într-un registru FPU pe 32 de biți sau C045 0000 0000 0000 într-un FPU pe 64 de biți registru (în standardul cu virgulă mobilă IEEE ).

Notare exponențială hexazecimală

Așa cum numerele zecimale pot fi reprezentate în notație exponențială , la fel și numerele hexazecimale. Prin convenție, litera P (sau p , pentru „putere“) reprezintă ori doi ridicat la puterea , în timp ce E (sau e ) servește un scop similar în zecimal , ca parte a notației E . Numărul după P este zecimal și reprezintă exponentul binar . Creșterea exponentului cu 1 se înmulțește cu 2, nu 16. 10.0p1 = 8.0p2 = 4.0p3 = 2.0p4 = 1.0p5. De obicei, numărul este normalizat astfel încât cifra hexazecimală principală să fie 1 (cu excepția cazului în care valoarea este exact 0).

Exemplu: 1.3DEp42 reprezintă 1.3DE 16  × 2 42 10 .

Notarea exponențială hexazecimală este cerută de standardul IEEE 754-2008 în virgulă mobilă. Această notație poate fi utilizat pentru literali în virgulă mobilă în C99 ediție a limbajului de programare C . Folosind % o sau % A specificatori de conversie, această notație poate fi produs prin implementări ale printf familiei funcțiilor după specificația C99 și Single Unix Specification (IEEE Std 1003.1) POSIX standard.

Conversie

Conversie binară

Majoritatea computerelor manipulează date binare, dar este dificil pentru oameni să lucreze cu un număr mare de cifre chiar și pentru un număr binar relativ mic. Deși majoritatea oamenilor sunt familiarizați cu sistemul de bază 10, este mult mai ușor să mapezi binare la hexazecimale decât la zecimale, deoarece fiecare cifră hexazecimală mapează la un număr întreg de biți (4 10 ). Acest exemplu convertește 1111 2 în baza zece. Deoarece fiecare poziție dintr-un număr binar poate conține fie 1, fie 0, valoarea sa poate fi ușor determinată de poziția sa din dreapta:

  • 0001 2 = 1 10
  • 0010 2 = 2 10
  • 0100 2 = 4 10
  • 1000 2 = 8 10

Prin urmare:

1111 2 = 8 10 + 4 10 + 2 10 + 1 10
  = 15 10

Cu puțină practică, maparea 1111 2 la F 16 într-un singur pas devine ușoară: consultați tabelul în reprezentare scrisă . Avantajul utilizării hexazecimale, mai degrabă decât zecimalului crește rapid odată cu mărimea numărului. Când numărul devine mare, conversia în zecimal este foarte obositoare. Cu toate acestea, atunci când se mapează la hexazecimal, este banal să considerăm șirul binar ca grupuri de 4 cifre și să le mapăm pe fiecare într-o singură cifră hexazecimală.

Acest exemplu arată conversia unui număr binar în zecimal, maparea fiecărei cifre la valoarea zecimală și adăugarea rezultatelor.

(01011110101101010010) 2 = 262144 10 + 65536 10 + 32768 10 + 16384 10 + 8192 10 + 2048 10 + 512 10 + 256 10 + 64 10 + 16 10 + 2 10
  = 387922 10

Comparați acest lucru cu conversia în hexazecimal, unde fiecare grup de patru cifre poate fi considerat independent și convertit direct:

(01011110101101010010) 2 = 0101  1110  1011  0101  0010 2
  = 5 E B 5 2 16
  = 5EB52 16

Conversia de la hexazecimal la binar este la fel de directă.

Alte conversii simple

Deși cuaternarul (baza 4) este puțin utilizat, poate fi ușor convertit în și din hexadecimal sau binar. Fiecare cifră hexazecimală corespunde unei perechi de cifre cuaternare și fiecare cifră cuaternară corespunde unei perechi de cifre binare. În exemplul de mai sus 5 E B 5 2 16 = 11 32 23 11 02 4 .

Sistemul octal (baza 8) poate fi, de asemenea, convertit cu relativă ușurință, deși nu la fel de trivial ca la bazele 2 și 4. Fiecare cifră octală corespunde a trei cifre binare, mai degrabă decât patru. Prin urmare, putem converti între octal și hexadecimal printr-o conversie intermediară în binar urmată de regruparea cifrelor binare în grupuri de trei sau patru.

Divizia-rest în baza sursei

Ca și în cazul tuturor bazelor, există un algoritm simplu pentru conversia unei reprezentări a unui număr în hexazecimal prin efectuarea operațiilor de divizare și rest în întregul bază. În teorie, acest lucru este posibil din orice bază, dar pentru majoritatea oamenilor numai zecimale și pentru majoritatea computerelor numai binare (care pot fi convertite prin metode mult mai eficiente) pot fi tratate cu ușurință cu această metodă.

Fie d numărul care trebuie reprezentat în hexazecimal, iar seria h i h i − 1 ... h 2 h 1 să fie cifrele hexazecimale care reprezintă numărul.

  1. i ← 1
  2. h i ← d mod 16
  3. d ← (d - h i ) / 16
  4. Dacă d = 0 (returnează seria h i ) altfel crește i și treci la pasul 2

„16” poate fi înlocuit cu orice altă bază dorită.

Următoarea este o implementare JavaScript a algoritmului de mai sus pentru convertirea oricărui număr într-o hexazecimală în reprezentarea String. Scopul său este de a ilustra algoritmul de mai sus. Cu toate acestea, pentru a lucra cu date cu seriozitate, este mult mai recomandabil să lucrați cu operatori bit-bit .

function toHex(d) {
  var r = d % 16;
  if (d - r == 0) {
    return toChar(r);
  }
  return toHex((d - r) / 16) + toChar(r);
}

function toChar(n) {
  const alpha = "0123456789ABCDEF";
  return alpha.charAt(n);
}

Conversia prin adunare și multiplicare

Un tabel de multiplicare hexazecimală

De asemenea, este posibil să se facă conversia atribuind fiecărui loc din baza sursă reprezentarea hexazecimală a valorii sale loc - înainte de a efectua multiplicarea și adăugarea pentru a obține reprezentarea finală. De exemplu, pentru a converti numărul B3AD în zecimal, se poate împărți numărul hexazecimal în cifrele sale: B (11 10 ), 3 (3 10 ), A (10 10 ) și D (13 10 ) și apoi obțineți finalul rezultă înmulțind fiecare reprezentare zecimală cu 16 p ( p fiind poziția corespunzătoare a cifrelor hexagonale, numărând de la dreapta la stânga, începând cu 0). În acest caz, avem:

B3AD = (11 × 16 3 ) + (3 × 16 2 ) + (10 × 16 1 ) + (13 × 16 0 )

care este 45997 în baza 10.

Instrumente pentru conversie

Majoritatea sistemelor informatice moderne cu interfețe grafice de utilizator oferă un utilitar de calculator încorporat capabil să efectueze conversii între diferitele radice și, în majoritatea cazurilor, ar include și hexazecimalul.

În Microsoft Windows , utilitarul Calculator poate fi setat la modul Științific (numit mod Programator în unele versiuni), care permite conversii între radix 16 (hexazecimal), 10 (zecimal), 8 ( octal ) și 2 ( binar ), bazele cele mai multe frecvent utilizate de programatori. În modul științific, tastatura numerică de pe ecran include cifrele hexazecimale de la A la F, care sunt active când este selectat „Hex”. Cu toate acestea, în modul hexagonal, calculatorul Windows acceptă numai numere întregi.

Aritmetica elementară

Operații elementare, cum ar fi adunarea, scăderea, înmulțirea și împărțirea pot fi efectuate indirect prin conversia la un sistem numeral alternativ , cum ar fi sistemul zecimal utilizat în mod obișnuit sau sistemul binar în care fiecare cifră hexagonală corespunde a patru cifre binare.

Alternativ, se poate efectua, de asemenea, operații elementare direct în cadrul sistemului hexagonal în sine - bazându-se pe tabelele sale de adunare / multiplicare și algoritmii standard corespunzători, cum ar fi diviziunea lungă și algoritmul de scădere tradițional.

Numere reale

Numere rationale

Ca și în cazul altor sisteme de cifre, sistemul hexazecimal poate fi utilizat pentru a reprezenta numerele raționale , deși expansiunile repetate sunt comune, deoarece șaisprezece (10 16 ) are doar un singur factor primar; Două.

Pentru orice bază, 0,1 (sau „1/10”) este întotdeauna echivalent cu una împărțită la reprezentarea acelei valori de bază în propriul sistem numeric. Astfel, dacă împărțirea unul câte două pentru binare sau împărțirea unul de șaisprezece pentru hexazecimal, ambele aceste fracțiuni sunt scrise 0.1. Deoarece radixul 16 este un pătrat perfect (4 2 ), fracțiile exprimate în hexazecimal au o perioadă impară mult mai des decât cele zecimale și nu există numere ciclice (în afară de cifre simple banale). Cifrele recurente sunt expuse atunci când numitorul în termeni mai mici are un factor prim care nu se găsește în raza; astfel, atunci când se utilizează notația hexazecimală, toate fracțiile cu numitori care nu sunt o putere de doi rezultă într-un șir infinit de cifre recurente (cum ar fi treimi și cincimi). Acest lucru face hexazecimal (și binar) mai puțin convenabil decât zecimal pentru reprezentarea numerelor raționale, deoarece o proporție mai mare se află în afara intervalului său de reprezentare finită.

Toate numerele raționale reprezentabile finit în hexazecimal sunt, de asemenea, reprezentabile finit în zecimal, duodecimal și sexagesimal : adică orice număr hexazecimal cu un număr finit de cifre are, de asemenea, un număr finit de cifre atunci când este exprimat în acele alte baze. Dimpotrivă, doar o fracțiune dintre cele reprezentabile finit în aceste din urmă baze sunt reprezentabile finit în hexazecimal. De exemplu, zecimalul 0.1 corespunde reprezentării recurente infinite 0.1 9 în hexazecimal. Cu toate acestea, hexazecimal este mai eficient decât duodecimal și sexagesimal pentru reprezentarea fracțiilor cu puteri de două în numitor. De exemplu, 0,0625 10 (un al șaisprezecelea) este echivalent cu 0,1 16 , 0,09 12 și 0; 3,45 60 .

n
Factori primi ai zecimii de bază, b = 10: 2 , 5 ; b - 1 = 9: 3 ; b + 1 = 11: 11

Factori primi hexazecimali de bază, b = 16 10 = 10: 2 ; b - 1 = 15 10 = F: 3, 5 ; b + 1 = 17 10 = 11: 11
Fracțiune Factori primi Reprezentarea pozițională Reprezentarea pozițională Factori primi Fracțiune (1 / n)
2 1/2 2 0,5 0,8 2 1/2
3 1/3 3 0. 3333 ... = 0. 3 0. 5555 ... = 0. 5 3 1/3
4 1/4 2 0,25 0,4 2 1/4
5 1/5 5 0,2 0. 3 5 1/5
6 1/6 2 , 3 0,1 6 0,2 A 2 , 3 1/6
7 1/7 7 0. 142857 0. 249 7 1/7
8 1/8 2 0,125 0,2 2 1/8
9 1/9 3 0. 1 0. 1C7 3 1/9
10 1/10 2 , 5 0,1 0,1 9 2 , 5 1 / A
11 1/11 11 0. 09 0. 1745D B 1 / B
12 1/12 2 , 3 0,08 3 0,1 5 2 , 3 1 / C
13 1/13 13 0. 076923 0. 13B D 1 / D
14 1/14 2 , 7 0,0 714285 0,1 249 2 , 7 1 / E
15 1/15 3 , 5 0,0 6 0. 1 3 , 5 1 / F.
16 1/16 2 0,0625 0,1 2 1/10
17 1/17 17 0. 0588235294117647 0. 0F 11 1/11
18 1/18 2 , 3 0,0 5 0,0 E38 2 , 3 1/12
19 1/19 19 0. 052631578947368421 0. 0D79435E5 13 1/13
20 1/20 2 , 5 0,05 0,0 C 2 , 5 1/14
21 1/21 3 , 7 0. 047619 0. 0C3 3 , 7 1/15
22 1/22 2 , 11 0,0 45 0,0 BA2E8 2 , B 1/16
23 1/23 23 0. 0434782608695652173913 0. 0B21642C859 17 1/17
24 1/24 2 , 3 0,041 6 0,0 A 2 , 3 1/18
25 1/25 5 0,04 0. 0A3D7 5 1/19
26 1/26 2 , 13 0,0 384615 0,0 9D8 2 , D 1 / 1A
27 1/27 3 0. 037 0. 097B425ED 3 1 / 1B
28 1/28 2 , 7 0,03 571428 0,0 924 2 , 7 1 / 1C
29 1/29 29 0. 0344827586206896551724137931 0. 08D3DCB 1D 1 / 1D
30 1/30 2 , 3 , 5 0,0 3 0,0 8 2 , 3 , 5 1 / 1E
31 1/31 31 0. 032258064516129 0. 08421 1F 1 / 1F
32 1/32 2 0,03125 0,08 2 1/20
33 1/33 3 , 11 0. 03 0. 07C1F 3 , B 1/21
34 1/34 2 , 17 0,0 2941176470588235 0,0 78 2 , 11 1/22
35 1/35 5 , 7 0,0 285714 0. 075 5 , 7 1/23
36 1/36 2 , 3 0,02 7 0,0 71C 2 , 3 1/24

Numere irationale

Tabelul de mai jos prezintă expansiunile unor numere iraționale comune în zecimale și hexazecimale.

Număr Reprezentarea pozițională
Zecimal Hexadecimal
2 (lungimea diagonalei unei unități pătrate ) 1.414 213 562 373 095 048 ... 1.6A09E667F3BCD ...
3 (lungimea diagonalei unui cub de unitate ) 1.732 050 807 568 877 293 ... 1.BB67AE8584CAA ...
5 (lungimea diagonalei unui dreptunghi 1 × 2 ) 2.236 067 977 499 789 696 ... 2.3C6EF372FE95 ...
φ (phi, raportul auriu = (1+ 5 ) / 2 ) 1.618 033 988 749 894 848 ... 1.9E3779B97F4A ...
π (pi, raportul dintre circumferință și diametrul unui cerc) 3.141 592 653 589 793 238 462 643
383 279 502 884 197 169 399 375 105 ...
3.243F6A8885A308D313198A2E0
3707344A4093822299F31D008 ...
e (baza logaritmului natural ) 2.718 281 828 459 045 235 ... 2.B7E151628AED2A6B ...
τ ( constanta Thue – Morse ) 0,412 454 033 640 107 597 ... 0,6996 9669 9669 6996 ...
γ (diferența limitativă dintre
seria armonică și logaritmul natural)
0,577 215 664 901 532 860 ... 0.93C467E37DB0C7A4D1B ...

Puteri

Puterile a două au expansiuni foarte simple în hexazecimal. Primele șaisprezece puteri din două sunt prezentate mai jos.

2 x Valoare Valoare (zecimală)
2 0 1 1
2 1 2 2
2 2 4 4
2 3 8 8
2 4 10 hex 16 dec
2 5 20 hex 32 dec
2 6 40 hex 64 dec
2 7 80 hex 128 dec
2 8 100 hex 256 dec
2 9 200 hex 512 dec
2 A (2 10 dec ) 400 hex 1024 dec
2 B (2 11 dec ) 800 hex 2048 dec
2 C (2 12 dec ) 1000 hex 4096 dec
2 D (2 13 dec ) 2000 hex 8192 dec
2 E (2 14 dec ) 4000 hex 16.384 dec
2 F (2 15 dec ) 8000 hex 32.768 dec
2 10 (2 16 dec ) 10000 hex 65.536 dec

Istoria culturală

Unitățile tradiționale chineze de măsură au fost baza-16. De exemplu, un jīn (斤) din vechiul sistem este egal cu șaisprezece taeluri . Suanpan (Chinese abac ) pot fi utilizate pentru a efectua calcule hexazecimale , cum ar fi adunări și scăderi.

Ca și în cazul sistemului duodecimal , au existat ocazional încercări de a promova hexadecimalul ca sistem numeric preferat. Aceste încercări propun adesea pronunție și simboluri specifice pentru numerele individuale. Unele propuneri unifică măsurile standard, astfel încât să fie multipli de 16. O astfel de propunere timpurie a fost prezentată de John W. Nystrom în Proiectul unui nou sistem de aritmetică, greutate, măsură și monede: Propus să fie numit sistemul tonal, cu șaisprezece la baza , publicat în 1862. Nystrom , printre altele , propuse de timp hexazecimal , care subdivizează o zi de 16, astfel că există 16 „ore“ (sau „10 Tims “, pronunțat tontim ) într - o zi.

Cuvântul hexazecimal este mai întâi înregistrată în 1952. Este macaronic , în sensul că aceasta combină greacă ἕξ (hex) „șase“ cu latină -decimal . Alternativa latinală sexadecimală (comparați cuvântul sexagesimal pentru baza 60) este mai veche și vede o utilizare cel puțin ocazională de la sfârșitul secolului al XIX-lea. Este încă în uz în anii 1950 în documentația Bendix . Schwartzman (1994) susține că utilizarea sexadecimalului ar fi putut fi evitată datorită abrevierii sale sugestive la sex . Multe limbi occidentale începând din anii 1960 au adoptat termeni echivalenți în formare cu hexazecimale (ex. Franceză hexadecimală , italiană esadecimale , română hexazecimală , sârbă хексадецимални etc.), dar altele au introdus termeni care înlocuiesc cuvintele native pentru „șaisprezece” (de exemplu, greacă δεκαεξαδικός, islandeză sextándakerfi , rusă шестнадцатеричной etc.)

Terminologia și notația nu au fost stabilite decât la sfârșitul anilor 1960. Donald Knuth, în 1969, a susținut că termenul corect din punct de vedere etimologic ar fi senidențial , sau eventual sedenar , un termen latinat destinat să transmită „grupat pe 16”, modelat pe binare , ternare și cuaternare etc. Conform argumentului lui Knuth, termenii corecți pentru zecimal și octal aritmetica ar fi dinar și octonary , respectiv. Alfred B. Taylor a folosit senidenția la mijlocul anilor 1800 pentru munca alternativă, deși a respins baza 16 din cauza „numărului incomod de cifre”.

Notarea actuală, care folosește literele de la A la F, se stabilește ca standard de facto începând din 1966, ca urmare a publicării manualului Fortran IV pentru IBM System / 360 , care (spre deosebire de variantele anterioare ale Fortran) recunoaște un standard pentru introducerea constantelor hexazecimale. După cum sa menționat mai sus, notațiile alternative au fost utilizate de NEC (1960) și The Pacific Data Systems 1020 (1964). Standardul adoptat de IBM pare să fi fost adoptat pe scară largă în 1968, când Bruce Alan Martin în scrisoarea adresată editorului CACM se plânge că

„Cu alegerea ridicolă a literelor A, B, C, D, E, F ca simboluri ale numărului hexazecimal care se adaugă problemelor deja supărătoare ale distincției numerelor octale (sau hexazenale) de numerele zecimale (sau numele variabilelor), timpul este prea mare pentru reconsiderare dintre simbolurile noastre numerice. Acest lucru ar fi trebuit făcut înainte ca alegerile slabe să se transforme într-un standard de facto! "

Argumentul lui Martin a fost că utilizarea numerelor de la 0 la 9 în numere nedecimale „implică pentru noi o schemă de valori locale de zece baze”: „De ce să nu folosim simboluri (și nume) complet noi pentru cele șapte sau cincisprezece cifre diferite de zero necesare în octal sau hex Chiar utilizarea literelor de la A la P ar fi o îmbunătățire, dar simboluri complet noi ar putea reflecta natura binară a sistemului ".


Base16 (codare transfer)

Base16 (ca nume propriu fără spațiu) se poate referi, de asemenea, la o codificare binară la text care aparține aceleiași familii ca Base32 , Base58 și Base64 .

În acest caz, datele sunt împărțite în secvențe de 4 biți și fiecare valoare (între 0 și 15 inclusiv) este codificată folosind 16 simboluri din setul de caractere ASCII . Deși pot fi utilizate orice 16 simboluri din setul de caractere ASCII, în practică sunt întotdeauna alese cifrele ASCII „0” - „9” și literele „A” - „F” (sau minuscula „a” - „f”) pentru a se alinia cu notația scrisă standard pentru numerele hexazecimale.

Există mai multe avantaje ale codificării Base16:

  • Majoritatea limbajelor de programare au deja facilități pentru a analiza hexadecimal codificat ASCII
  • Fiind exact o jumătate de octet, 4 biți sunt mai ușor de procesat decât cei 5 sau 6 biți ai Base32 și respectiv Base64
  • Simbolurile 0-9 și AF sunt universale în notație hexazecimală, deci este ușor de înțeles dintr-o privire, fără a fi nevoie să se bazeze pe un tabel de căutare a simbolurilor
  • Multe arhitecturi CPU au instrucțiuni dedicate care permit accesul la jumătate de octeți (altfel cunoscut sub numele de „ nibble ”), făcându-l mai eficient în hardware decât Base32 și Base64

Principalele dezavantaje ale codificării Base16 sunt:

  • Eficiența spațiului este de numai 50%, deoarece fiecare valoare de 4 biți din datele originale va fi codificată ca un octet de 8 biți. În schimb, codificările Base32 și Base64 au o eficiență spațială de 63% și respectiv 75%.
  • Posibilă complexitate adăugată de a accepta atât majuscule, cât și litere mici

Suportul pentru codificarea Base16 este omniprezent în calculul modern. Este baza standardului W3C pentru codificarea URL procentuală , în care un caracter este înlocuit cu un semn procentual „%” și forma codificată Base16. Majoritatea limbajelor de programare moderne includ în mod direct suport pentru formatarea și analizarea numerelor codificate Base16.

Vezi si

Referințe