Heksadesimal - Hexadecimal

I matematikk og databehandling er det heksadesimale (også grunn 16 eller heks ) tallsystemet et posisjons tallsystem som representerer tall ved hjelp av en radix (base) på 16. I motsetning til den vanlige måten å representere tall ved å bruke 10 symboler, bruker heksadesimale 16 forskjellige symboler, oftest symbolene "0" - "9" for å representere verdiene 0 til 9, og "A" - "F" (eller alternativt "a" - "f") for å representere verdiene 10 til 15.

Heksadesimale tall er mye brukt av datasystemdesignere og programmerere fordi de gir en menneskelig vennlig fremstilling av binærkodede verdier. Hvert heksadesimalt siffer representerer fire biter (binære sifre), også kjent som en nibble (eller nybble), som er 1/2 av en byte . For eksempel kan en enkelt byte ha verdier fra 00000000 til 11111111 i binær form, som enkelt kan representeres som 00 til FF i heksadesimal.

I matematikk brukes vanligvis et abonnement for å spesifisere basen. For eksempel desimalverdien1.281 vil bli uttrykt i heksadesimal som 501 16 . I programmeringen brukes en rekke notasjoner for å betegne heksadesimale tall, vanligvis med prefiks eller suffiks. Prefikset 0xbrukes i C og relaterte programmeringsspråk, noe som vil betegne denne verdien som 0x501.

Heksadesimal brukes i overføringskodingen Base16 , der hver byte i klarteksten er delt inn i to 4-bits verdier og representert med to heksadesimale sifre.

Representasjon

Skriftlig framstilling

I nesten all moderne bruk representerer bokstavene A – F eller a – f verdiene 10–15, mens tallene 0–9 brukes til å representere deres vanlige verdier.

Det er ingen universell konvensjon om å bruke små eller store bokstaver, så hver er utbredt eller foretrukket i bestemte miljøer etter fellesskapsstandarder eller konvensjoner; selv blandet boks brukes ofte. Syv segmenter bruker AbCdEF i blandet bokstav til å lage sifre som kan skilles fra hverandre.

Det er en viss standardisering av å bruke mellomrom (i stedet for komma eller et annet skilletegn) for å skille hexverdier i en lang liste. For eksempel i den følgende hex-dumpen er hver 8-bits byte et 2-sifret hex-tall, med mellomrom mellom dem, mens 32-biters forskyvning i starten er et 8-sifret hex-nummer.

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

Skiller fra desimal

I sammenhenger der basen ikke er klar, kan heksadesimale tall være tvetydige og forveksles med tall uttrykt i andre baser. Det er flere konvensjoner for å uttrykke verdier entydig. Et numerisk abonnement (selv skrevet i desimal) kan gi basen eksplisitt: 159 10 er desimal 159; 159 16 er heksadesimal 159, som er lik 345 10 . Noen forfattere foretrekker et tekstabonnement, for eksempel 159 desimal og 159 hex , eller 159 d og 159 h .

Donald Knuth introduserte bruken av et bestemt skrifttype for å representere en bestemt radiks i boken The TeXbook . Heksadesimale representasjoner er skrevet der i en skrivemaskin skrifttype : 5A3

I lineære tekstsystemer, som de som brukes i de fleste datamaskinprogrammeringsmiljøer, har det oppstått en rekke metoder:

  • Unix (og relaterte) skall, AT & T -samlingsspråk og på samme måte C -programmeringsspråket (og dets syntaktiske etterkommere som C ++ , C# , Go , D , Java , JavaScript , Python og Windows PowerShell ) bruker prefikset 0xfor numeriske konstanter representert i hex: 0x5A3. Tegn- og strengkonstanter kan uttrykke tegnkoder i heksadesimal med prefikset \xetterfulgt av to sekskantede sifre: '\x1B'representerer Esc -kontrolltegnet; "\x1B[0m\x1B[25;1H"er en streng som inneholder 11 tegn med to innebygde Esc -tegn. For å skrive ut et helt tall som heksadesimalt med printf -funksjonsfamilien, brukes formatkonverteringskoden %Xeller %x.
  • I URIer (inkludert URL -er ) skrives tegnkoder som heksadesimale par foran med %: http://www.example.com/name%20with%20spaceshvor %20er koden for mellomromstegnet (tomt) , ASCII -kodepunkt 20 i hex, 32 i desimal.
  • I XML og XHTML kan tegn uttrykkes som heksadesimale numeriske tegnreferanser ved hjelp av notasjonen , for eksempel representerer tegnet U+2019 (det høyre enkelt anførselstegnet). Hvis det ikke er noe, er tallet desimal (altså det samme tegnet).&#xcode;’x’
  • I Unicode -standarden er en tegnverdi representert med U+etterfulgt av hex -verdien, f.eks. U+20ACEr Euro -tegnet (€).
  • Fargereferanser i HTML-, CSS- og X -vindu kan uttrykkes med seks heksadesimale sifre (to hver for de røde, grønne og blå komponentene i den rekkefølgen) foran #: hvit, for eksempel, er representert som #FFFFFF. CSS tillater også 3-sekssifrede forkortelser med en sekssifret per komponent: #FA3 forkortelser #FFAA33 (en gylden oransje:  ).
  • I MIME (e-postutvidelser) kodet -utskrivbar koding skrives tegnkoder som heksadesimale par foran med =: Espa=F1aer "España" (F1 er koden for ñ i ISO/IEC 8859-1 tegnsettet).)
  • I Intel-avledede forsamlingsspråk og Modula-2 er heksadesimalt angitt med et suffiks H eller h : FFheller 05A3H. Noen implementeringer krever en ledende null når det første heksadesimale siffertegnet ikke er et desimaltall, så man ville skrive i 0FFhstedet for FFh. Noen andre implementeringer (for eksempel NASM) tillater tall i C-stil ( 0x42).
  • Andre assembler ( 6502 , Motorola ), Pascal , Delphi , noen versjoner av BASIC ( Commodore ), Gamemaker språk , Godot og Forth bruker $som prefiks: $5A3.
  • Noen samlingsspråk (Microchip) bruker notasjonen H'ABCD'(for ABCD 16 ). På samme måte bruker Fortran 95 Z'ABCD '.
  • Ada og VHDL vedlegge heksadesimale tall i baserte "numeriske sitater": 16#5A3#. For bitvektorkonstanter bruker VHDL notasjonen x"5A3".
  • Verilog representerer heksadesimale konstanter i formen 8'hFF, hvor 8 er antall biter i verdien og FF er den heksadesimale konstanten.
  • Den Smalltalk språket bruker prefikset 16r:16r5A3
  • Postscript og Bourne skallet og dets derivater betegner hex med prefiks 16#: 16#5A3. For PostScript kan binære data (for eksempel bildepiksler ) uttrykkes som uprefikserte påfølgende heksadesimale par: AA213FD51B3801043FBC...
  • Common Lisp bruker prefikser #xog #16r. Ved å sette variablene * read-base * og * print-base * til 16 kan du også bruke til å bytte leser og skriver for et Common Lisp-system til heksadesimal tallrepresentasjon for lesing og utskrift av tall. Dermed kan heksadesimale tall representeres uten prefiks -koden #x eller #16r, når inngangs- eller utgangsbasen er endret til 16.
  • MSX BASIC , QuickBASIC , FreeBASIC og Visual Basic prefiks heksadesimale tall med &H:&H5A3
  • BBC BASIC og Locomotive BASIC bruk &for hex.
  • TI-89 og 92-serien bruker et 0hprefiks:0h5A3
  • Algol 68 bruker prefikset 16rfor å betegne heksadesimale tall: 16r5a3. Binære, kvartære (base-4) og oktale tall kan spesifiseres på samme måte.
  • Det vanligste formatet for heksadesimal på IBM -hovedrammer ( zSeries ) og mellomstore datamaskiner ( IBM i ) som kjører de tradisjonelle operativsystemene ( zOS , zVSE , zVM , TPF , IBM i ) er X'5A3', og brukes i Assembler, PL/I , COBOL , JCL , skript, kommandoer og andre steder. Dette formatet var også vanlig på andre (og nå foreldede) IBM -systemer. Noen ganger ble anførselstegn brukt i stedet for apostrofer.
  • Enhver IPv6 -adresse kan skrives som åtte grupper på fire heksadesimale sifre (noen ganger kalt hextets ), der hver gruppe er atskilt med et kolon ( :). Dette er for eksempel en gyldig IPv6 -adresse: 2001:0db8:85a3:0000:0000:8a2e:0370:7334eller forkortes ved å fjerne nuller som 2001:db8:85a3::8a2e:370:7334( IPv4 -adresser skrives vanligvis i desimal).
  • Globalt unike identifikatorer skrives som tretti-to heksadesimale sifre, ofte i ulik bindestrek-adskilte grupper, for eksempel 3F2504E0-4F89-41D3-9A0C-0305E82C3301.

Andre symboler for 10-15

Bruken av bokstavene A til F for å representere sifrene over 9 var ikke universell i datamaskinens tidlige historie.

  • I løpet av 1950-årene foretrakk noen installasjoner, for eksempel Bendix-14, å bruke sifrene 0 til 5 med en overlinje for å angi verdiene 10–15 som 0 , 1 , 2 , 3 , 4 og 5 .
  • Den SWAC (1950) og Bendix G-15 (1956) datamaskiner anvendes de små bokstaver u , v , w , x , y og z for verdiene 10 til 15.
  • Den illiac I (1952) datamaskin benyttes de store bokstavene K , S , N , J , F og L for verdiene 10 til 15.
  • Librascope LGP-30 (1956) brukte bokstavene F , G , J , K , Q og W for verdiene 10 til 15.
  • Den Honeywell Datamatic D-1000 (1957) brukes små bokstaver b , c , d , e , f , og g , mens den Elbit  100 (1967) anvendes den store bokstaver B , C , D , E , F og G for verdiene 10 til 15.
  • Den Monrobot XI (1960) benyttet bokstavene S , T , U , V , W og X for verdiene 10 til 15.
  • Den NEC parametron datamaskin Neac 1103 (1960) benyttet bokstavene D , G , H , J , K (og muligens V ) for verdier 10-15.
  • Pacific Data Systems 1020 (1964) brukte bokstavene L , C , A , S , M og D for verdiene 10 til 15.
  • Nye numeriske symboler og navn ble introdusert i den bibi-binære notasjonen av Boby Lapointe i 1968. Denne notasjonen ble ikke veldig populær.
Bruce Alan Martins heksadesimale notasjonsforslag

Verbal og digital fremstilling

Det er ingen tradisjonelle tall som representerer mengdene fra ti til femten-bokstaver brukes som erstatning-og de fleste europeiske språk mangler ikke-desimalnavn for tallene over ti. Selv om engelsk har navn for flere ikke-desimale krefter ( par for den første binære effekten, poengsum for den første vigesimale kraften, dusin , brutto og stor brutto for de tre første duodecimale kreftene), beskriver ikke noe engelsk navn de heksadesimale kreftene (desimal 16 , 256, 4096, 65536, ...). Noen leser heksadesimale tall siffer for siffer, for eksempel et telefonnummer, eller ved hjelp av NATOs fonetiske alfabet , Joint Army/Navy Phonetic Alphabet eller et lignende ad-hoc- system. I kjølvannet av adeksjonen av heksadesimal blant IBM System/360 -programmerere, foreslo Magnuson (1968) en uttaleveiledning som ga korte navn til bokstavene i heksadesimal - for eksempel ble "A" uttalt "ann", B "bet", C "chris", etc. Et annet navnesystem ble utarbeidet av Babb (2015), av en TV -serie som en spøk. Enda et annet navnesystem har blitt publisert på nettet av Rogers (2007) som prøver å gjøre den verbale representasjonen uansett, selv når det faktiske tallet ikke inneholder tall A – F. Eksempler er listet opp i tabellene nedenfor.

Hexadecimal fingertelling

Systemer for å telle på sifre har blitt utviklet for både binær og heksadesimal. Arthur C. Clarke foreslo å bruke hver finger som en på/av -bit, slik at fingertelling fra null til 1023 10 på ti fingre. Et annet system for å telle opp til FF 16 (255 10 ) er illustrert til høyre.

Magnusson (1968)
navngivningsmetode
Nummer Uttale
EN ann
B vedde
C chris
D punktum
E ernest
F frost
1A annteen
A0 annty
5B femti-bet
A01C annty christeen
1AD0 annteen dotty
3A7D tretti år sytti prikker
Rogers (2007)
navngivningsmetode
Nummer Uttale
EN ti
B elleve
C tolv
D tappe
E eptwin
F fim
10 tex
11 oneteek
1F fimteek
50 fiftek
C0 twelftek
100 hundrek
1000 tusen
3E thirtek-eptwin
E1 eptek-one
C4A tolv-hundrek-fourtek-ti
1743 en tusen-sju-
-hundrek-fourtek-tre

Tegn

Det heksadesimale systemet kan uttrykke negative tall på samme måte som i desimal: −2A for å representere −42 10 og så videre.

Heksadesimal kan også brukes til å uttrykke de nøyaktige bitmønstrene som brukes i prosessoren , så en sekvens med heksadesimale sifre kan representere en signert eller til og med en flytende verdi. På denne måten kan det negative tallet −42 10 skrives som FFFF FFD6 i et 32-biters CPU-register (i to-komplement ), som C228 0000 i et 32-biters FPU- register eller C045 0000 0000 0000 i et 64-biters FPU register (i IEEE flytpunktstandard ).

Heksadesimal eksponentiell notasjon

Akkurat som desimaltall kan representeres i eksponentiell notasjon , kan heksadesimale tall også. Etter konvensjon representerer bokstaven P (eller p , for "kraft") ganger to hevet til effekten av , mens E (eller e ) tjener et lignende formål i desimal som en del av E -notasjonen . Tallet etter P er desimal og representerer den binære eksponenten. Å øke eksponenten med 1 multipliserer med 2, ikke 16. 10.0p1 = 8.0p2 = 4.0p3 = 2.0p4 = 1.0p5. Vanligvis normaliseres tallet slik at det ledende heksadesimale sifferet er 1 (med mindre verdien er nøyaktig 0).

Eksempel: 1.3DEp42 representerer 1.3DE 16  × 2 42 10 .

Heksadesimal eksponentiell notasjon kreves av IEEE 754-2008 binær flytende standard. Denne notasjon kan brukes til flyttalls litteraler i C99 -utgaven av C programmeringsspråk . Ved å bruke konverteringsspesifikatorene %a eller %A , kan denne notasjonen produseres av implementeringer av printf -familien med funksjoner etter C99 -spesifikasjonen og Single Unix Specification (IEEE Std 1003.1) POSIX -standarden.

Omdannelse

Binær konvertering

De fleste datamaskiner manipulerer binære data, men det er vanskelig for mennesker å arbeide med et stort antall sifre for et relativt lite binært tall. Selv om de fleste mennesker er kjent med base 10 -systemet, er det mye lettere å kartlegge binært til heksadesimalt enn til desimal fordi hvert heksadesimale siffer kartlegger et helt antall biter (4 10 ). Dette eksemplet konverterer 1111 2 til base ti. Siden hver posisjon i et binært tall kan inneholde enten 1 eller 0, kan verdien lett bestemmes av posisjonen fra høyre:

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

Derfor:

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

Med liten praksis blir det enkelt å kartlegge 1111 2 til F 16 i ett trinn: se tabell i skriftlig fremstilling . Fordelen med å bruke heksadesimal i stedet for desimal øker raskt med størrelsen på tallet. Når tallet blir stort, er konvertering til desimal veldig kjedelig. Når du tilordner til heksadesimalt, er det imidlertid trivielt å betrakte den binære strengen som firesifrede grupper og tilordne hver til et heksadesimalt siffer.

Dette eksemplet viser konvertering av et binært tall til desimal, tilordner hvert siffer til desimalverdien og legger til resultatene.

(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

Sammenlign dette med konverteringen til heksadesimal, der hver gruppe på fire sifre kan betraktes uavhengig og konverteres direkte:

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

Konverteringen fra heksadesimal til binær er like direkte.

Andre enkle konverteringer

Selv om kvartær (base 4) er lite brukt, kan det enkelt konverteres til og fra heksadesimalt eller binært. Hvert heksadesimalt siffer tilsvarer et par kvaternære siffer og hvert kvartær siffer tilsvarer et par binære siffer. I eksemplet ovenfor 5 E B 5 2 16 = 11 32 23 11 02 4 .

Det oktale (basis 8) systemet kan også konverteres relativt enkelt, men ikke fullt så trivielt som med basene 2 og 4. Hvert oktalsiffer tilsvarer tre binære sifre, i stedet for fire. Derfor kan vi konvertere mellom oktal og heksadesimal via en mellomliggende konvertering til binær etterfulgt av omgruppering av de binære sifrene i grupper på enten tre eller fire.

Divisjon-resten i kildebasen

Som med alle baser er det en enkel algoritme for å konvertere en representasjon av et tall til heksadesimal ved å utføre heltallsdeling og restoperasjoner i kildebasen. I teorien er dette mulig fra hvilken som helst basis, men for de fleste mennesker kan bare desimaler og for de fleste datamaskiner bare binære (som kan konverteres med langt mer effektive metoder) enkelt håndteres med denne metoden.

La d være tallet som skal representeres i heksadesimal, og serien h i h i − 1 ... h 2 h 1 være de heksadesimale sifrene som representerer tallet.

  1. i ← 1
  2. h i ← d mod 16
  3. d ← (d - h i ) / 16
  4. Hvis d = 0 (returner serien h i ), øker du ellers i og går til trinn 2

"16" kan erstattes med en hvilken som helst annen base som kan være ønsket.

Følgende er en JavaScript -implementering av algoritmen ovenfor for å konvertere et hvilket som helst tall til en heksadesimal i String -representasjon. Formålet er å illustrere algoritmen ovenfor. For å jobbe med data seriøst, er det imidlertid mye mer tilrådelig å jobbe med bitvise operatører .

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);
}

Konvertering gjennom tillegg og multiplikasjon

En heksadesimal multiplikasjonstabell

Det er også mulig å gjøre konverteringen ved å tilordne hvert sted i kildebasen den heksadesimale representasjonen av dens plassverdi - før du utfører multiplikasjon og tillegg for å få den endelige representasjonen. For eksempel, for å konvertere tallet B3AD til desimal, kan man dele det heksadesimale tallet i tallene: B (11 10 ), 3 (3 10 ), A (10 10 ) og D (13 10 ), og deretter få den endelige resultatet ved å multiplisere hver desimalrepresentasjon med 16 p ( p er den tilsvarende sekssifrede posisjonen, teller fra høyre til venstre, begynner med 0). I dette tilfellet har vi det:

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

som er 45997 i base 10.

Verktøy for konvertering

De fleste moderne datasystemer med grafiske brukergrensesnitt gir et innebygd kalkulatorverktøy som er i stand til å utføre konverteringer mellom de forskjellige radiklene, og vil i de fleste tilfeller også inkludere heksadesimalt.

I Microsoft Windows kan kalkulatorverktøyet settes til vitenskapelig modus (kalt programmerermodus i noen versjoner), som tillater konverteringer mellom radix 16 (heksadesimal), 10 (desimal), 8 ( oktal ) og 2 ( binær ), basene mest ofte brukt av programmerere. I vitenskapelig modus inkluderer det numeriske tastaturet på skjermen de heksadesimale sifrene A til F, som er aktive når "Hex" er valgt. I hex -modus støtter imidlertid Windows Calculator bare heltall.

Elementær regning

Elementære operasjoner slik addisjon, subtraksjon, multiplikasjon og divisjon kan utføres indirekte gjennom konvertering til et alternativt tallsystem , for eksempel det vanlige desimalsystemet eller det binære systemet hvor hvert sekskant siffer tilsvarer fire binære sifre.

Alternativt kan man også utføre elementære operasjoner direkte i selve hex -systemet - ved å stole på addisjons-/multiplikasjonstabellene og de tilhørende standardalgoritmene som lang divisjon og den tradisjonelle subtraksjonsalgoritmen.

Ekte tall

Rasjonelle tall

Som med andre tallsystemer, kan det heksadesimale systemet brukes til å representere rasjonelle tall , selv om gjentatte utvidelser er vanlige siden seksten (10 16 ) bare har en eneste primfaktor; to.

For en hvilken som helst basis er 0,1 (eller "1/10") alltid ekvivalent med en dividert med representasjonen av den grunnverdien i sitt eget tallsystem. Således, om vi deler en med to for binær eller deler en med seksten for heksadesimal, er begge disse brøkene skrevet som 0.1. Fordi radiksen 16 er en perfekt firkant (4 2 ), har fraksjoner uttrykt i heksadesimal en merkelig periode mye oftere enn desimaler, og det er ingen sykliske tall (andre enn trivielle enkelttall). Gjentagende sifre vises når nevneren i laveste termer har en primfaktor som ikke finnes i radiksen; Når du bruker heksadesimal notasjon, resulterer alle fraksjoner med nevnere som ikke er en potens på to i en uendelig rekke gjentagende siffer (for eksempel tredjedeler og femtedeler). Dette gjør heksadesimale (og binære) mindre praktiske enn desimaler for å representere rasjonelle tall siden en større andel ligger utenfor området med begrenset representasjon.

Alle rasjonelle tall som er endelig representable i heksadesimale er også endelig representable i desimal, duodecimal og sexagesimal : det vil si at alle heksadesimale tall med et begrenset antall sifre også har et begrenset antall sifre når de uttrykkes i de andre basene. Motsatt er bare en brøkdel av de endelig representable i de siste basene endelig representable i heksadesimale. For eksempel tilsvarer desimal 0.1 den uendelige tilbakevendende representasjonen 0.1 9 i heksadesimal. Imidlertid er heksadesimal mer effektivt enn duodecimal og sexagesimal for å representere brøk med to krefter i nevneren. For eksempel tilsvarer 0,0625 10 (en sekstende) 0,1 16 , 0,09 12 og 0; 3,45 60 .

n Desimal
Prime -faktorer for basen, b = 10: 2 , 5 ; b - 1 = 9: 3 ; b + 1 = 11: 11
Heksadesimal
primfaktorer for base, b = 16 10 = 10: 2 ; b - 1 = 15 10 = F: 3, 5 ; b + 1 = 17 10 = 11: 11
Brøkdel Viktige faktorer Posisjonsrepresentasjon Posisjonsrepresentasjon Viktige faktorer Brøk (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
1. 3 1/13 1. 3 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 1. 3 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

Irrasjonelle tall

Tabellen nedenfor gir utvidelser av noen vanlige irrasjonelle tall i desimal og heksadesimal.

Nummer Posisjonsrepresentasjon
Desimal Heksadesimal
2 (lengden på diagonalen til en kvadratisk enhet ) 1.414 213 562 373 095 048 ... 1.6A09E667F3BCD ...
3 (lengden på diagonalen til en enhetskube ) 1,732 050 807 568 877 293 ... 1.BB67AE8584CAA ...
5 (lengden på diagonalen til et 1 × 2 rektangel ) 2.236 067 977 499 789 696 ... 2.3C6EF372FE95 ...
φ (phi, det gylne snitt = (1+ 5 )/2 ) 1.618 033 988 749 894 848 ... 1.9E3779B97F4A ...
π (pi, forholdet mellom omkrets og diameter på en sirkel) 3.141 592 653 589 793 238 462 643
383 279 502 884 197 169 399 375 105 ...
3.243F6A8885A308D313198A2E0
3707344A4093822299F31D008 ...
e (grunnlaget for den naturlige logaritmen ) 2,718 281 828 459 045 235 ... 2.B7E151628AED2A6B ...
τ ( Thue - Morse -konstanten ) 0,412 454 033 640 107 597 ... 0,6996 9669 9669 6996 ...
γ (den begrensende forskjellen mellom de
harmoniske seriene og den naturlige logaritmen)
0,577 215 664 901 532 860 ... 0.93C467E37DB0C7A4D1B ...

Fullmakter

Fullmakter til to har veldig enkle utvidelser i heksadesimal. De første seksten maktene til to er vist nedenfor.

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

Kulturhistorie

De tradisjonelle kinesiske måleenhetene var base-16. For eksempel tilsvarer en jīn (斤) i det gamle systemet seksten taels . Den suanpan (kinesisk kuleramme ) kan brukes til å utføre heksadesimale beregninger, for eksempel tilføyelser og subtraksjoner.

Som med duodesimalsystemet har det vært sporadiske forsøk på å fremme heksadesimal som det foretrukne tallsystemet. Disse forsøkene foreslår ofte spesifikk uttale og symboler for de enkelte tallene. Noen forslag forener standardmål slik at de er multipler av 16. Et tidlig slikt forslag ble fremmet av John W. Nystrom i Project of a New System of Arithmetic, Weight, Measure and Coins: Proposed to be tonalsystem, with Sixteen til basen , utgitt i 1862. Nystrom foreslo blant annet heksadesimal tid , som deler en dag med 16, slik at det er 16 "timer" (eller "10 tims ", uttales tontim ) på en dag.

Ordet heksadesimale er først registrert i 1952. Det er macaronic i den forstand at den kombinerer gresk ἕξ (hex) "seks" med Latinate -decimal . Det all-latinske alternativet sexadecimal (sammenlign ordet sexagesimal for base 60) er eldre, og ser i hvert fall sporadisk bruk fra slutten av 1800-tallet. Den er fremdeles i bruk på 1950 -tallet i Bendix -dokumentasjon. Schwartzman (1994) hevder at bruk av sexdecimal kan ha blitt unngått på grunn av den antydende forkortelsen til sex . Mange vestlige språk siden 1960 -tallet har vedtatt termer som tilsvarer heksadesimal (f.eks. Fransk heksadesimal , italiensk esadecimale , rumensk heksasimal , serbisk хексадецимални , etc.), men andre har introdusert termer som erstatter innfødte ord med "seksten" (f.eks. Gresk δεκαεξαδικός, islandsk) sextándakerfi , russisk шестнадцатеричной etc.)

Terminologi og notasjon ble ikke avgjort før på slutten av 1960 -tallet. Donald Knuth i 1969 argumenterte for at det etymologisk korrekte uttrykket ville være senatet , eller muligens sedenary , et latinsk begrep ment å formidle "gruppert med 16" modellert på binært , ternært og kvarternært etc. I henhold til Knuths argument, er de riktige termene for desimal og oktal aritmetikk ville være henholdsvis denary og octonary . Alfred B. Taylor brukte senatet i midten av 1800-tallet på alternative tallbaser , selv om han avviste base 16 på grunn av det "utilgjengelige antallet siffer".

Den nåværende notasjonen som bruker bokstavene A til F, etablerer seg som de facto-standarden som begynte i 1966, i kjølvannet av publiseringen av Fortran IV- håndboken for IBM System/360 , som (i motsetning til tidligere varianter av Fortran) anerkjenner en standard for å skrive inn heksadesimale konstanter. Som nevnt ovenfor ble alternative notasjoner brukt av NEC (1960) og The Pacific Data Systems 1020 (1964). Standarden som ble vedtatt av IBM ser ut til å ha blitt bredt vedtatt i 1968, da Bruce Alan Martin i sitt brev til redaktøren for CACM klager over at

"Med det latterlige valget av bokstavene A, B, C, D, E, F som heksadesimale tallsymboler, som legger til allerede plagsomme problemer med å skille oktale (eller hex) tall fra desimaltall (eller variabelnavn), er tiden overmoden for ny vurdering. av våre tallsymboler. Dette burde ha blitt gjort før dårlige valg gelt inn i en de facto standard! "

Martins argument var at bruk av tallene 0 til 9 i ikke-desimale tall "innebærer for oss et basis-ti stedsverdi-opplegg": "Hvorfor ikke bruke helt nye symboler (og navn) for de syv eller femten null-sifrene som trengs i oktal eller sekskant . Selv bruk av bokstavene A til P ville være en forbedring, men helt nye symboler kan gjenspeile systemets binære natur ".


Base16 (overføringskoding)

Base16 (som et eget navn uten mellomrom) kan også referere til en binær til tekstkoding som tilhører samme familie som Base32 , Base58 og Base64 .

I dette tilfellet blir data delt inn i 4-bits sekvenser, og hver verdi (mellom 0 og 15 inkluderende) er kodet ved hjelp av 16 symboler fra ASCII- tegnsettet. Selv om 16 symboler fra ASCII -tegnsettet kan brukes, er ASCII -sifrene '0' - '9' og bokstavene 'A' - 'F' (eller små 'a' - 'f') alltid valgt i praksis for å samsvare med standard skriftlig notasjon for heksadesimale tall.

Det er flere fordeler med Base16 -koding:

  • De fleste programmeringsspråk har allerede muligheter til å analysere ASCII-kodet heksadesimal
  • Å være nøyaktig en halv byte, er 4-bits lettere å behandle enn henholdsvis 5 eller 6 bits i Base32 og Base64
  • Symbolene 0-9 og AF er universelle i heksadesimal notasjon, så det er lett å forstå med et øyeblikk uten å måtte stole på et symboloppslagstabell
  • Mange CPU-arkitekturer har dedikerte instruksjoner som gir tilgang til en halvbyte (ellers kjent som en " nibble "), noe som gjør den mer effektiv i maskinvare enn Base32 og Base64

De største ulempene med Base16 -koding er:

  • Plasseffektivitet er bare 50%, siden hver 4-bits verdi fra de originale dataene vil bli kodet som en 8-bits byte. Derimot har Base32- og Base64 -kodingene en plasseffektivitet på henholdsvis 63% og 75%.
  • Mulig ekstra kompleksitet ved å måtte godta både store og små bokstaver

Støtte for Base16 -koding er allestedsnærværende i moderne databehandling. Det er grunnlaget for W3C- standarden for URL-prosentkoding , der et tegn erstattes med et prosenttegn "%" og dets Base16-kodede form. De fleste moderne programmeringsspråk inkluderer direkte støtte for formatering og analyse av Base16-kodede tall.

Se også

Referanser