Hexadecimal - Hexadecimal

Inom matematik och beräkning är hexadecimalsystemet (även bas 16 eller hex ) ett positionssystem som representerar siffror med en radix (bas) på 16. Till skillnad från det vanliga sättet att representera tal med 10 symboler, använder hexadecimal 16 olika symboler, oftast symbolerna "0" - "9" för att representera värdena 0 till 9 och "A" - "F" (eller alternativt "a" - "f") för att representera värdena 10 till 15.

Hexadecimala siffror används i stor utsträckning av datorsystemdesigners och programmerare eftersom de ger en mänsklig vänlig representation av binärkodade värden. Varje hexadecimal siffra representerar fyra bitar (binära siffror), även känd som en nibble (eller nybble), vilket är 1/2 av en byte . Till exempel kan en enda byte ha värden som sträcker sig från 00000000 till 11111111 i binär form, som bekvämt kan representeras som 00 till FF i hexadecimal.

I matematik används vanligtvis ett abonnemang för att specificera basen. Till exempel decimalvärdet1 281 skulle uttryckas i hexadecimal som 501 16 . Vid programmering används ett antal notationer för att beteckna hexadecimala tal, vanligtvis med prefix eller suffix. Prefixet 0xanvänds i C och relaterade programmeringsspråk, vilket skulle beteckna detta värde som 0x501.

Hexadecimal används i överföringskodningen Base16 , där varje byte i klartext är uppdelad i två 4-bitars värden och representeras av två hexadecimala siffror.

Representation

Skriftlig framställning

I nästan all modern användning representerar bokstäverna A – F eller a – f värdena 10–15, medan siffrorna 0–9 används för att representera deras vanliga värden.

Det finns ingen universell konvention att använda gemener eller versaler, så var och en är vanlig eller föredragen i vissa miljöer enligt gemenskapsstandarder eller konventioner; även blandade fall används ofta. Sju-segmentskärmar använder AbCdEF i blandat fall för att göra siffror som kan särskiljas från varandra.

Det finns en viss standardisering av att använda mellanslag (snarare än kommatecken eller annat skiljetecken) för att separera hexvärden i en lång lista. Till exempel i följande hex-dump är varje 8-bitars byte ett 2-siffrigt hex-nummer, med mellanslag mellan dem, medan 32-bitars offset vid starten är ett 8-siffrigt 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

Skiljer sig från decimal

I sammanhang där basen inte är tydlig kan hexadecimala tal vara tvetydiga och förväxlas med tal uttryckta i andra baser. Det finns flera konventioner för att uttrycka värderingar entydigt. Ett numeriskt abonnemang (självt skrivet i decimal) kan ge basen uttryckligen: 159 10 är decimal 159; 159 16 är hexadecimal 159, vilket är lika med 345 10 . Vissa författare föredrar ett textabonnemang, till exempel 159 decimal och 159 hex , eller 159 d och 159 h .

Donald Knuth introducerade användningen av ett visst typsnitt för att representera en viss radix i sin bok The TeXbook . Hexadecimala representationer skrivs där i en skrivmaskin typsnitt : 5A3

I linjära textsystem, som de som används i de flesta datorprogrammeringsmiljöer, har en mängd olika metoder uppstått:

  • Unix (och relaterade) skal, AT&T monteringsspråk och likaså programmeringsspråket C (och dess syntaktiska ättlingar som C ++ , C# , Go , D , Java , JavaScript , Python och Windows PowerShell ) använder prefixet 0xför numeriska konstanter representerade i hex: 0x5A3. Tecken- och strängkonstanter kan uttrycka teckenkoder i hexadecimal med prefixet \xföljt av två hexasiffror: '\x1B'representerar Esc -kontrolltecknet; "\x1B[0m\x1B[25;1H"är en sträng som innehåller 11 tecken med två inbäddade Esc -tecken. För att mata ut ett heltal som hexadecimalt med printf -funktionsfamiljen, används formatkonverteringskoden %Xeller %x.
  • I URI (inklusive URL: er ) skrivs teckenkoder som hexadecimala par med prefix med %: http://www.example.com/name%20with%20spacesvar %20är koden för mellanslagstecknet (tomt) , ASCII -kodpunkt 20 i hex, 32 i decimal.
  • I XML och XHTML kan tecken uttryckas som hexadecimala numeriska teckenreferenser med hjälp av notationen , till exempel representerar tecknet U+2019 (det högra enda citattecknet). Om det inte finns är siffran decimal (alltså samma tecken).&#xcode;’x’
  • I Unicode -standarden representeras ett teckenvärde U+följt av hex -värdet, t.ex. U+20ACär Euro -tecknet (€).
  • Färgreferenser i HTML-, CSS- och X -fönstret kan uttryckas med sex hexadecimala siffror (två vardera för de röda, gröna och blåa komponenterna, i den ordningen) som före med #: vit, till exempel, representeras som #FFFFFF. CSS tillåter också 3-hexdigit förkortningar med en hexdigit per komponent: #FA3 förkortar #FFAA33 (en guldorange:  ).
  • I MIME (e-posttillägg) citerad-utskrivbar kodning skrivs teckenkoder som hexadecimala par med prefixet =: Espa=F1aär "España" (F1 är koden för ñ i ISO/IEC 8859-1 teckenuppsättningen).)
  • I Intel-härledda monteringsspråk och Modula-2 betecknas hexadecimal med ett suffix H eller h : FFheller 05A3H. Vissa implementeringar kräver en inledande nolla när det första hexadecimala tecknet inte är en decimal, så man skulle skriva 0FFhistället för FFh. Vissa andra implementeringar (t.ex. NASM) tillåter C-stilnummer ( 0x42).
  • Andra monterings språk ( 6502 , Motorola ), Pascal , Delphi , vissa versioner av BASIC ( Commodore ), Gamemaker språk , Godot och Forth använda $som prefix: $5A3.
  • Vissa monteringsspråk (mikrochip) använder notationen H'ABCD'(för ABCD 16 ). På samma sätt använder Fortran 95 Z'ABCD '.
  • Ada och VHDL bifoga hexadecimala siffror i baserade "numeriska citat" 16#5A3#. För bitvektorkonstanter använder VHDL notationen x"5A3".
  • Verilog representerar hexadecimala konstanter i formen 8'hFF, där 8 är antalet bitar i värdet och FF är den hexadecimala konstanten.
  • Den Smalltalk språk använder prefixet 16r:16r5A3
  • Postscript och Bourne-skal och dess derivat betecknar hex med prefixet 16#: 16#5A3. För PostScript kan binära data (t.ex. bildpixlar ) uttryckas som oprefixerade på varandra följande hexadecimala par: AA213FD51B3801043FBC...
  • Common Lisp använder prefixen #xoch #16r. Att ställa in variablerna * läsbas * och * utskriftsbas * till 16 kan också användas för att växla läsare och skrivare i ett Common Lisp-system till hexadecimal talrepresentation för läsning och utskrift av nummer. Således kan hexadecimala tal representeras utan prefixkoden #x eller #16r, när ingångs- eller utgångsbasen har ändrats till 16.
  • MSX BASIC , QuickBASIC , FreeBASIC och Visual Basic prefix hexadecimala tal med &H:&H5A3
  • BBC BASIC och Locomotive BASIC användning &för hex.
  • TI-89 och 92-serien använder ett 0hprefix:0h5A3
  • ALGOL 68 användningsområden prefixet 16ratt beteckna hexadecimala tal: 16r5a3. Binära, kvaternära (bas-4) och oktala tal kan specificeras på samma sätt.
  • Det vanligaste formatet för hexadecimal på IBM -huvudramar ( zSeries ) och mellanregisterdatorer ( IBM i ) som kör de traditionella operativsystemen ( zOS , zVSE , zVM , TPF , IBM i ) är X'5A3'och används i Assembler, PL/I , COBOL , JCL , skript, kommandon och andra platser. Detta format var vanligt på andra (och nu föråldrade) IBM -system. Ibland användes citattecken istället för apostrofer.
  • Varje IPv6 -adress kan skrivas som åtta grupper med fyra hexadecimala siffror (kallas ibland hextets ), där varje grupp är separerad med ett kolon ( :). Detta är till exempel en giltig IPv6 -adress: 2001:0db8:85a3:0000:0000:8a2e:0370:7334eller förkortas genom att ta bort nollor som 2001:db8:85a3::8a2e:370:7334( IPv4 -adresser skrivs vanligtvis med decimal).
  • Globalt unika identifierare skrivs som trettiotvå hexadecimala siffror, ofta i till exempel ojämna bindestreck-separerade grupper 3F2504E0-4F89-41D3-9A0C-0305E82C3301.

Andra symboler för 10-15

Användningen av bokstäverna A till F för att representera siffrorna över 9 var inte universell i dators tidiga historia.

  • Under 1950-talet föredrog vissa installationer, som Bendix-14, siffrorna 0 till 5 med en överlinje för att beteckna värdena 10–15 som 0 , 1 , 2 , 3 , 4 och 5 .
  • Den SWAC (1950) och Bendix G-15 (1956) datorer använde små bokstäver u , v , w , x , y och z för värdena 10 till 15.
  • Den ILLIAC I (1952) dator som används de versaler K , S , N , J , F och L för de värden 10 till 15.
  • Librascope LGP-30 (1956) använde bokstäverna F , G , J , K , Q och W för värdena 10 till 15.
  • Den Honeywell Datamatic D-1 tusen (1957) använde gemener b , c , d , e , f , och g medan Elbit  100 (1967) använde versaler B , C , D , E , F och G för de värden 10 till 15.
  • Den Monrobot XI (1960) som används bokstäverna S , T , U , V , W och X för de värden 10 till 15.
  • Den NEC parametron dator NEAC 1103 (1960) används bokstäverna D , G , H , J , K (och möjligen V ) för värden 10-15.
  • Pacific Data Systems 1020 (1964) använde bokstäverna L , C , A , S , M och D för värdena 10 till 15.
  • Nya numeriska symboler och namn introducerades i den bibi-binära notationen av Boby Lapointe 1968. Denna notation blev inte särskilt populär.
Bruce Alan Martins hexadecimala notationsförslag
  • Bruce Alan Martin från Brookhaven National Laboratory ansåg att valet av A – F var ”löjligt”. I ett brev från 1968 till redaktören för CACM föreslog han en helt ny uppsättning symboler baserat på bitplatserna, vilket inte fick mycket acceptans.
  • Vissa sju etapper display dekoder chips (dvs 74LS47) visar oväntad utgång på grund av logiken endast avsedd att producera 0-9 korrekt.

Verbal och digitala representationer

Det finns inga traditionella siffror för att representera mängderna från tio till femton-bokstäver används som ersättning-och de flesta europeiska språk saknar icke-decimalnamn för siffrorna över tio. Även om engelska har namn för flera icke-decimala makter ( par för den första binära effekten, poäng för den första vigesimala kraften, dussin , brutto och stor brutto för de tre första duodecimala krafterna), beskriver inget engelskt namn de hexadecimala krafterna (decimal 16 , 256, 4096, 65536, ...). Vissa människor läser hexadecimala siffror siffra för siffra, som ett telefonnummer, eller använder Natos fonetiska alfabet , Joint Army/Navy Phonetic Alphabet eller ett liknande ad-hoc- system. I kölvattnet av antagandet av hexadecimal bland IBM System/360 -programmerare föreslog Magnuson (1968) en uttalguide som gav kortnamn till hexadecimals bokstäver - till exempel uttalades "A" "ann", B "bet", C "chris", etc. Ett annat namngivningssystem utarbetades av Babb (2015), av en tv -serie som ett skämt. Ytterligare ett namngivningssystem har publicerats online av Rogers (2007) som försöker göra den verbala representationen i alla fall urskiljbar, även när det faktiska talet inte innehåller siffror A – F. Exempel listas i tabellerna nedan.

Hexadecimalt fingerräknarschema

System för att räkna på siffror har utformats för både binär och hexadecimal. Arthur C. Clarke föreslog att använda varje finger som en på/av -bit, så att fingerräkning från noll till 1023 10 på tio fingrar. Ett annat system för att räkna upp till FF 16 (255 10 ) illustreras till höger.

Magnusson (1968)
namngivningsmetod
siffra Uttal
A ann
B slå vad
C chris
D punkt
E ernest
F glasera
1A annteen
A0 anty
5B femtiospel
A01C annty christeen
1AD0 annteen dotty
3A7D trettio år sjuttio punkter
Rogers (2007)
namngivningsmetod
siffra Uttal
A tio
B elva
C tolv
D dränera
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-tio
1743 en-tusek-sju-
-hundrek-fourtek-tre

Tecken

Det hexadecimala systemet kan uttrycka negativa tal på samma sätt som i decimal: −2A för att representera −42 10 och så vidare.

Hexadecimal kan också användas för att uttrycka de exakta bitmönstren som används i processorn , så en sekvens av hexadecimala siffror kan representera ett signerat eller till och med ett flytande värde. På detta sätt kan det negativa talet −42 10 skrivas som FFFF FFD6 i ett 32-bitars CPU-register (i två-komplement ), som C228 0000 i ett 32-bitars FPU- register eller C045 0000 0000 0000 i ett 64-bitars FPU register (i IEEE floating-point-standarden ).

Hexadecimal exponentiell notation

Precis som decimaltal kan representeras i exponentiell notation , så kan också hexadecimala tal. Enligt konvention representerar bokstaven P (eller p , för "makt") gånger två som höjs till makt , medan E (eller e ) tjänar ett liknande syfte i decimal som en del av E -notationen . Siffran efter P är decimal och representerar den binära exponenten. Att öka exponenten med 1 multipliceras med 2, inte 16. 10.0p1 = 8.0p2 = 4.0p3 = 2.0p4 = 1.0p5. Vanligtvis normaliseras talet så att den ledande hexadecimala siffran är 1 (om inte värdet är exakt 0).

Exempel: 1.3DEp42 representerar 1.3DE 16  × 2 42 10 .

Hexadecimal exponentiell notation krävs av IEEE 754-2008 binära floating-point-standarden. Denna notation kan användas för flyttals litteraler i C99 upplagan av språket C-programmering . Genom att använda %a eller %A -konverteringsspecifikatörerna kan denna notation skapas genom implementeringar av printf -familjen med funktioner enligt C99 -specifikationen och Single Unix Specification (IEEE Std 1003.1) POSIX -standarden.

Omvandling

Binär konvertering

De flesta datorer manipulerar binär data, men det är svårt för människor att arbeta med ett stort antal siffror för även ett relativt litet binärt tal. Även om de flesta människor är bekanta med bas -10 -systemet, är det mycket lättare att kartlägga binärt till hexadecimalt än till decimal eftersom varje hexadecimal siffra kartlägger till ett helt antal bitar (4 10 ). Detta exempel konverterar 1111 2 till bas tio. Eftersom varje position i en binär siffra kan innehålla antingen 1 eller 0, kan dess värde lätt bestämmas av dess position från höger:

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

Därför:

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

Med lite övning blir det enkelt att kartlägga 1111 2 till F 16 i ett steg: se tabell i skriftlig representation . Fördelen med att använda hexadecimal snarare än decimal ökar snabbt med antalet. När antalet blir stora är omvandlingen till decimal mycket tråkig. Men vid mappning till hexadecimal är det trivialt att betrakta den binära strängen som 4-siffriga grupper och mappa var och en till en enda hexadecimal siffra.

Detta exempel visar konverteringen av ett binärt tal till decimal, mappar varje siffra till decimalvärdet och lägger till resultaten.

(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

Jämför detta med konverteringen till hexadecimal, där varje grupp med fyra siffror kan betraktas oberoende och konverteras direkt:

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

Omvandlingen från hexadecimal till binär är lika direkt.

Andra enkla omvandlingar

Även om kvaternär (bas 4) används lite, kan den enkelt konverteras till och från hexadecimal eller binär. Varje hexadecimal siffra motsvarar ett par kvaternära siffror och varje kvaternär siffra motsvarar ett par binära siffror. I exemplet ovan 5 E B 5 2 16 = 11 32 23 11 02 4 .

Den oktala (bas 8) Systemet kan också omvandlas med relativ lätthet, men inte riktigt lika trivialt som med baser 2 och 4. Varje oktala siffror motsvarar tre binära siffror, snarare än fyra. Därför kan vi konvertera mellan oktal och hexadecimal via en mellanliggande konvertering till binär följt av omgruppering av de binära siffrorna i grupper om antingen tre eller fyra.

Division-resterande i källbas

Som med alla baser finns det en enkel algoritm för att konvertera en representation av ett tal till hexadecimal genom att göra heltal och resterande operationer i källbasen. I teorin är detta möjligt från vilken bas som helst, men för de flesta människor kan endast decimaler och för de flesta datorer endast binära (som kan konverteras med mycket effektivare metoder) enkelt hanteras med denna metod.

Låt d vara det tal som ska representeras i hexadecimal, och serien h i h i − 1 ... h 2 h 1 är de hexadecimala siffrorna som representerar talet.

  1. i ← 1
  2. h i ← d mod 16
  3. d ← (d - h i ) / 16
  4. Om d = 0 (returnera serien h i ) ökar du i annars och går till steg 2

"16" kan ersättas med någon annan bas som kan vara önskvärd.

Följande är en JavaScript -implementering av ovanstående algoritm för att konvertera valfritt tal till en hexadecimal i String -representation. Dess syfte är att illustrera ovanstående algoritm. För att arbeta med data på allvar är det dock mycket mer lämpligt att arbeta med bitvisa 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);
}

Omvandling genom addition och multiplikation

En hexadecimal multiplikationstabell

Det är också möjligt att göra omvandlingen genom att tilldela varje plats i källbasen den hexadecimala representationen av dess platsvärde - innan du utför multiplikation och addition för att få den slutliga representationen. Till exempel, för att konvertera talet B3AD till decimal, kan man dela det hexadecimala talet i dess siffror: B (11 10 ), 3 (3 10 ), A (10 10 ) och D (13 10 ), och sedan få den sista resultatet genom att multiplicera varje decimalrepresentation med 16 p ( p är motsvarande hex -siffriga position, räknas från höger till vänster, med början med 0). I det här fallet har vi det:

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

vilket är 45997 i bas 10.

Verktyg för konvertering

De flesta moderna datorsystem med grafiska användargränssnitt ger ett inbyggt kalkylatorverktyg som kan utföra konverteringar mellan de olika radikalerna och skulle i de flesta fall också inkludera hexadecimal.

I Microsoft Windows kan kalkylatorverktyget ställas in på vetenskapligt läge (kallas programmerarläge i vissa versioner), vilket möjliggör konverteringar mellan radix 16 (hexadecimal), 10 (decimal), 8 ( oktal ) och 2 ( binär ), baserna mest som vanligtvis används av programmerare. I vetenskapligt läge innehåller den numeriska knappsatsen på skärmen de hexadecimala siffrorna A till F, som är aktiva när "Hex" väljs. I hex -läge stöder dock Windows Calculator endast heltal.

Elementär räkning

Elementära operationer såsom addition, subtraktion, multiplikation och division kan utföras indirekt genom konvertering till ett alternativt numeriskt system , såsom det vanliga decimalsystemet eller det binära systemet där varje hex-siffra motsvarar fyra binära siffror.

Alternativt kan man också utföra elementära operationer direkt inom själva hex -systemet - genom att förlita sig på dess addition/multiplikationstabeller och motsvarande standardalgoritmer som lång division och den traditionella subtraktionsalgoritmen.

Riktiga nummer

Rationella nummer

Som med andra numeriska system kan det hexadecimala systemet användas för att representera rationella tal , även om upprepade expansioner är vanliga eftersom sexton (10 16 ) bara har en enda primfaktor; två.

För varje bas är 0,1 (eller "1/10") alltid ekvivalent med en dividerad med representationen av det basvärdet i sitt eget nummersystem. Således, oavsett om man delar en med två för binär eller delar en med sexton för hexadecimal, skrivs båda dessa fraktioner som 0.1. Eftersom radixen 16 är en perfekt kvadrat (4 2 ) har fraktioner uttryckta i hexadecimala en udda period mycket oftare än decimaler, och det finns inga cykliska tal (andra än triviala enkelsiffror). Återkommande siffror visas när nämnaren i lägsta termer har en primfaktor som inte finns i radixen; sålunda, vid användning av hexadecimala notering, resulterar alla fraktioner med nämnare som inte är en effekt på två i en oändlig rad av återkommande siffror (som tredjedelar och femtedelar). Detta gör hexadecimala (och binära) mindre praktiska än decimaler för att representera rationella tal eftersom en större andel ligger utanför dess intervall av begränsad representation.

Alla rationella siffror som är slutgiltigt representerbara i hexadecimala är också definitivt representerbara i decimal, duodecimal och sexagesimal : det vill säga alla hexadecimala tal med ett ändligt antal siffror har också ett begränsat antal siffror när de uttrycks i de andra baserna. Omvänt är bara en bråkdel av de slutligt representerbara i de senare baserna slutligt representativa i hexadecimala. Exempelvis motsvarar decimal 0.1 den oändliga återkommande representationen 0.1 9 i hexadecimala. Hexadecimal är dock mer effektiv än duodecimal och sexagesimal för att representera fraktioner med krafter på två i nämnaren. Till exempel motsvarar 0,0625 10 (en sextonde) 0,1 16 , 0,09 12 och 0; 3,45 60 .

n Decimal
Primfaktorer för bas, b = 10: 2 , 5 ; b - 1 = 9: 3 ; b + 1 = 11: 11
Hexadecimal
primfaktorer för bas, b = 16 10 = 10: 2 ; b - 1 = 15 10 = F: 3, 5 ; b + 1 = 17 10 = 11: 11
Fraktion Viktiga faktorer Positionsrepresentation Positionsrepresentation Viktiga 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
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

Irrationella tal

Tabellen nedan visar expansioner av några vanliga irrationella tal i decimal och hexadecimal.

siffra Positionsrepresentation
Decimal Hexadecimal
2 (längden på diagonalen på en kvadratisk enhet ) 1,414 213 562 373 095 048 ... 1.6A09E667F3BCD ...
3 (längden av diagonalen i en enhet kub ) 1.732 050 807 568 877 293 ... 1.BB67AE8584CAA ...
5 (längden på diagonalen på en 1 × 2 rektangel ) 2.236 067 977 499 789 696 ... 2.3C6EF372FE95 ...
φ (phi, det gyllene snittet = (1+ 5 )/2 ) 1,618 033 988 749 894 848 ... 1.9E3779B97F4A ...
π (pi, förhållandet mellan omkrets och cirkeldiameter ) 3,141 592 653 589 793 238 462 643
383 279 502 884 197 169 399 375 105 ...
3.243F6A8885A308D313198A2E0
3707344A4093822299F31D008 ...
e (basen för den naturliga 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 begränsande skillnaden mellan de
harmoniska serierna och den naturliga logaritmen)
0,577 215 664 901 532 860 ... 0.93C467E37DB0C7A4D1B ...

Befogenheter

Befogenheter för två har mycket enkla expansioner i hexadecimala. De första sexton krafterna av två visas nedan.

2 x Värde Värde (decimal)
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

Kulturhistoria

De traditionella kinesiska måttenheterna var bas-16. Till exempel motsvarar en jīn (斤) i det gamla systemet sexton taels . Den Suanpan (kinesisk kulram ) kan användas för att utföra hexadecimala beräkningar såsom additioner och subtraktioner.

Som med duodecimalsystemet har det varit enstaka försök att främja hexadecimal som det föredragna numeriska systemet. Dessa försök föreslår ofta specifikt uttal och symboler för de enskilda siffrorna. Vissa förslag förenar standardmått så att de är multiplar av 16. Ett tidigt sådant förslag lades fram av John W. Nystrom i Project of a New System of Arithmetic, Weight, Measure and Coins: Föreslås kallas Tonal System, med sexton till basen , publicerad 1862. Nystrom föreslog bland annat hexadecimal tid , som delar upp en dag med 16, så att det blir 16 "timmar" (eller "10 tim ", uttalas tontim ) på en dag.

Ordet hexadecimal spelades in första gången 1952. Det är makaroniskt i den meningen att det kombinerar grekiska ἕξ (hex) "sex" med latin -decimal . Det helt latinska alternativet sexadecimal (jämför ordet sexagesimal för bas 60) är äldre och ser åtminstone tillfällig användning från slutet av 1800-talet. Det används fortfarande på 1950 -talet i Bendix -dokumentation. Schwartzman (1994) hävdar att användning av sexdecimal kan ha undvikits på grund av dess suggestiva förkortning till sex . Många västerländska språk har sedan 1960 -talet antagit termer som liknar hexadecimala (t.ex. franska hexadecimal , italienska esadecimale , rumänska hexazecimal , serbiska хексадецимални , etc.) men andra har infört termer som ersätter "sexton" (t.ex. grekiska δεκαεξαδικός, isländska) sextándakerfi , ryska шестнадцатеричной etc.)

Terminologi och notation blev inte avgjort förrän i slutet av 1960 -talet. Donald Knuth 1969 hävdade att den etymologiskt korrekta termen skulle vara senatet , eller möjligen sedenary , en latinsk term som är avsedd att förmedla "grupperad med 16" modellerad på binärt , ternärt och kvartärt etc. Enligt Knuths argument är de korrekta termerna för decimal och oktal aritmetik skulle vara denary respektive octonary . Alfred B. Taylor använde senatet i mitten av 1800-talet på alternativa nummerbaser, även om han avvisade bas 16 på grund av dess "okomplicerade antal siffror".

Den nuvarande notationen med bokstäverna A till F etablerar sig som de facto-standarden från 1966, i kölvattnet av publiceringen av Fortran IV- manualen för IBM System/360 , som (till skillnad från tidigare varianter av Fortran) känner igen en standard för att ange hexadecimala konstanter. Som nämnts ovan användes alternativa notationer av NEC (1960) och The Pacific Data Systems 1020 (1964). Standarden som IBM antog verkar ha blivit allmänt antagen 1968, när Bruce Alan Martin i sitt brev till CACM: s redaktör klagar på att

"Med det löjliga valet av bokstäverna A, B, C, D, E, F som hexadecimala siffrorsymboler som bidrar till redan besvärliga problem med att skilja oktala (eller hex) tal från decimalnummer (eller variabelnamn), är tiden övermogen för omprövning. av våra nummersymboler. Detta borde ha gjorts innan dåliga val gelt in i en de facto -standard! "

Martins argument var att användning av siffrorna 0 till 9 i icke-decimala tal "innebär för oss ett grundtio platsvärdesschema": "Varför inte använda helt nya symboler (och namn) för de sju eller femton icke-nollsiffriga siffrorna som behövs i oktal eller hex ... Även användning av bokstäverna A till P skulle vara en förbättring, men helt nya symboler kan återspegla systemets binära natur ".


Base16 (överföringskodning)

Base16 (som ett egennamn utan mellanslag) kan också referera till en binär till textkodning som tillhör samma familj som Base32 , Base58 och Base64 .

I detta fall bryts data upp i 4-bitars sekvenser och varje värde (mellan 0 och 15 inklusive) kodas med 16 symboler från ASCII- teckenuppsättningen. Även om alla 16 symboler från ASCII -teckenuppsättningen kan användas, väljs i praktiken alltid ASCII -siffrorna '0' - '9' och bokstäverna 'A' - 'F' (eller gemener 'a' - 'f') för att anpassa sig till standard skriven notation för hexadecimala tal.

Det finns flera fördelar med Base16 -kodning:

  • De flesta programmeringsspråk har redan möjlighet att analysera ASCII-kodad hexadecimal
  • Att vara exakt en halv byte är 4-bitars lättare att bearbeta än 5 eller 6 bitarna i Base32 respektive Base64
  • Symbolerna 0-9 och AF är universella i hexadecimala notering, så det är lätt att förstå med en blick utan att behöva förlita sig på en symboluppslagstabell
  • Många CPU-arkitekturer har dedikerade instruktioner som ger tillgång till en halvbyte (annars känd som en " nibble "), vilket gör den mer effektiv i hårdvara än Base32 och Base64

De främsta nackdelarna med Base16 -kodning är:

  • Utrymmeeffektiviteten är bara 50%, eftersom varje 4-bitars värde från originaldata kommer att kodas som en 8-bitars byte. Däremot har Base32- och Base64 -kodningar en rymdeffektivitet på 63% respektive 75%.
  • Möjlig komplicerad komplexitet av att behöva acceptera både stora och små bokstäver

Stöd för Base16 -kodning är allestädes närvarande i modern databehandling. Det är grunden för W3C- standarden för URL-procentkodning , där ett tecken ersätts med ett procenttecken "%" och dess Base16-kodade form. De flesta moderna programmeringsspråk inkluderar direkt stöd för formatering och analys av Base16-kodade nummer.

Se även

Referenser