Hexadecimális - Hexadecimal

A matematika és számítástechnikai , a hexadecimális (szintén 16 alap vagy hex ) számrendszer egy pozicionális számrendszer , amely képviseli számok segítségével egy radix (bázis) a 16. Ellentétben a közös utat a képviselő számok segítségével 10 szimbólumok, hexadecimális amely 16 különálló szimbólumot, leggyakrabban a "0" - "9" szimbólumok jelentik a 0-9 értékeket, és az "A" - "F" (vagy alternatívaként "a" - "f") a 10-15 értékeket.

A hexadecimális számokat széles körben használják a számítógépes rendszerek tervezői és programozói, mivel ezek a binárisan kódolt értékek emberbarát ábrázolását biztosítják . Mindegyik hexadecimális jegy jelenti négy bitet (bináris számjegy), más néven egy tetrád (vagy Nybble), amely 1/2 bájt . Például egyetlen bájt értéke 00000000 és 11111111 között lehet bináris formában, amely kényelmesen ábrázolható 00 -tól FF -ig hexadecimális formában.

A matematikában tipikusan alindexet használnak az alap megadására. Például a tizedes érték1 281 hexadecimális számban 501 16 lenne . A programozás során számos jelölést használnak a hexadecimális számok jelölésére, általában elő- vagy utótagot tartalmaznak. Az előtagot 0xa C és a kapcsolódó programozási nyelvek használják, amelyek ezt az értéket jelölik 0x501.

A hexadecimális a Base16 átviteli kódolásban használatos , amelyben az egyszerű szöveg minden bájtja két 4 bites értékre van bontva, és két hexadecimális számjeggyel van ábrázolva.

Reprezentáció

Írásbeli ábrázolás

Szinte minden modern használatban az A – F vagy a – f betűk a 10–15, míg a 0–9 számok a szokásos értékeiket jelölik.

Nincs egyetemes egyezmény a kis- vagy nagybetűk használatára, ezért mindegyik elterjedt vagy előnyös bizonyos környezetekben a közösségi szabványok vagy egyezmények szerint; gyakran vegyes tokot is gyakran használnak. A hét szegmenses kijelzők vegyes nagybetűs AbCdEF-et használnak egymástól megkülönböztethető számjegyek készítéséhez.

Van némi szabványosítás a szóközök használatára (vessző vagy más írásjel helyett) a hexadecimális értékek elkülönítésére a hosszú listában. Például a következő hexadecimális kiíratásban minden 8 bites bájt egy kétjegyű hexadecimális szám, köztük szóközökkel, míg a 32 bites eltolás az elején egy 8 számjegyű hexadecimális szám.

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

Megkülönböztetés a tizedestől

Azokban az összefüggésekben, ahol az alap nem világos, a hexadecimális számok kétértelműek lehetnek, és összetéveszthetők más bázisokban kifejezett számokkal. Számos konvenció létezik az értékek egyértelmű kifejezésére. Egy numerikus alindex (maga decimális formában írva) kifejezetten megadhatja az alapot: 159 10 decimális 159; 159 16 hexadecimális 159, ami egyenlő 345 10 -gyel . Egyes szerzők inkább a szöveges alsó indexet részesítik előnyben, például 159 decimális és 159 hexadecimális vagy 159 d és 159 óra .

Donald Knuth A TeXbook című könyvében bevezette egy adott betűtípus használatát egy adott radix ábrázolására . A hexadecimális ábrázolások írógép betűtípussal vannak írva : 5A3

A lineáris szövegrendszerekben, például a legtöbb számítógépes programozási környezetben, számos módszer merült fel:

  • A Unix (és a kapcsolódó) héjak, az AT&T összeszerelési nyelv és a C programozási nyelv (és szintaktikai leszármazottai, mint a C ++ , C# , Go , D , Java , JavaScript , Python és Windows PowerShell ) az előtagot használják a 0xhexadecimálisan ábrázolt numerikus állandókhoz: 0x5A3. A karakter- és karakterláncállandók hexadecimális karakterkódokat fejezhetnek ki az előtaggal \x, amelyet két hexadecimális számjegy követ: '\x1B'az Esc vezérlőkaraktert jelöli ; "\x1B[0m\x1B[25;1H"egy karakterlánc, amely 11 karaktert tartalmaz két beágyazott Esc karakterrel. Ha egy egész számot hexadecimális formában szeretne kiadni a printf függvénycsaláddal, használja a formátum átalakító kódját %Xvagy %x.
  • Az URI-k (beleértve URL ), karakter kódok vannak írva a hexadecimális párok előtaggal %: http://www.example.com/name%20with%20spaceshol %20van a kód a teret (üres) karaktert, ASCII kód 20 pont hexadecimális, 32 tizedes.
  • Az XML -ben és az XHTML -ben a karakterek hexadecimális numerikus hivatkozásokként fejezhetők ki a jelölés használatával , például az U+2019 karaktert (a megfelelő egyetlen idézőjel) jelölik. Ha nincs, a szám tizedes (tehát ugyanaz a karakter).&#xcode;’x’
  • A Unicode szabványban egy karakterértéket U+a hexadecimális érték követ, pl U+20AC. Az Euro jel (€).
  • A színhivatkozások HTML, CSS és X ablakban hat hexadecimális számjeggyel fejezhetők ki (kettő a piros, zöld és kék komponensek számára, ebben a sorrendben), amelyek előtagja például #: fehér #FFFFFF. A CSS háromhatszávos rövidítéseket is megenged, komponensenként egy hatjegyű számmal: #FA3 rövidít #FFAA33 (aranynarancs:  ).
  • A MIME (e-mail kiterjesztések) idézett-nyomtatható kódolásban a karakterkódok hexadecimális párokként íródnak, előtaggal =: Espa=F1a"España" (F1 a ñ kódja az ISO/IEC 8859-1 karakterkészletben).)
  • Az Intel-ből származó összeállítási nyelvekben és a Modula-2-ben a hexadecimális számot H vagy h utótag jelöli : FFhvagy 05A3H. Bizonyos megvalósításoknál nullára van szükség, amikor az első hexadecimális számjegy nem decimális számjegy, ezért az egyik 0FFhhelyett írhat FFh. Néhány más megvalósítás (például a NASM) C-típusú számokat ( 0x42) engedélyez.
  • Egyéb szerelési nyelv ( 6502 , Motorola ), Pascal , Delphi , egyes változatai BASIC ( Commodore ), GameMaker nyelv , Godot és Forth használni $előtagként: $5A3.
  • Egyes összeszerelési nyelvek (Microchip) a jelölést használják H'ABCD'(az ABCD 16 esetében ). Hasonlóképpen, a Fortran 95 Z'ABCD -t használ.
  • Ada és VHDL csatolniuk hexadecimális számokkal alapú „numerikus idézetek”: 16#5A3#. A bit vektor állandók VHDL használja a jelölést x"5A3".
  • A Verilog hexadecimális állandókat képvisel a formában 8'hFF, ahol 8 az érték bitjeinek száma, az FF pedig a hexadecimális állandó.
  • A Smalltalk nyelv az előtagot használja 16r:16r5A3
  • PostScript és a Bourne héj és származékai jelölik hex előtaggal 16#: 16#5A3. A PostScript bináris adatokat (például kép pixel ) lehet kifejezni előtag egymást követő hexadecimális pár: AA213FD51B3801043FBC...
  • A Common Lisp az #xés az előtagokat használja #16r. A * read-base * és a * print-base * változók 16-ra való beállításával arra is lehet váltani, hogy a Common Lisp rendszer olvasóját és nyomtatóját hexadecimális számábrázolásra kapcsolja a számok olvasásához és nyomtatásához. Így a hexadecimális számok #x vagy #16r előtagkód nélkül is megjeleníthetők, ha a bemeneti vagy kimeneti bázist 16 -ra módosították.
  • MSX BASIC , QuickBASIC , FreeBASIC és Visual Basic előtag hexadecimális számok &H:&H5A3
  • BBC BASIC és Locomotive BASIC& hatszögletű használat .
  • A TI-89 és 92 sorozat 0helőtagot használ :0h5A3
  • ALGOL 68 felhasználások az előtag 16rjelölésére hexadecimális szám: 16r5a3. A bináris, kvaterner (bázis-4) és oktális számok hasonlóan adhatók meg.
  • A hagyományos operációs rendszereket ( zOS , zVSE , zVM , TPF , IBM i ) futtató IBM nagyszámítógépeken ( zSeries ) és középkategóriás számítógépeken ( IBM i ) a leggyakoribb hexadecimális formátum az Assembler, PL/I , COBOL , JCL , parancsfájlok, parancsok és más helyek. Ez a formátum gyakori volt más (és már elavult) IBM rendszereken is. Időnként idézőjeleket használtak az aposztrófok helyett.X'5A3'
  • Bármely IPv6 -cím nyolc hexadecimális számjegyből álló nyolc csoportba írható (néha hextetnek is nevezik ), ahol minden csoport kettősponttal ( :) van elválasztva . Ez például érvényes IPv6 -cím: 2001:0db8:85a3:0000:0000:8a2e:0370:7334vagy rövidítve nullák eltávolításával 2001:db8:85a3::8a2e:370:7334(az IPv4 -címeket általában tizedesjegyekkel írják).
  • A globálisan egyedi azonosítókat harminckét hexadecimális számjegyként írják fel, gyakran például egyenlőtlen kötőjelekkel elválasztott csoportokban 3F2504E0-4F89-41D3-9A0C-0305E82C3301.

Egyéb szimbólumok a 10-15

Az AF betűk használata a 9 feletti számjegyek ábrázolására nem volt általános a számítógépek korai történetében.

  • Az 1950-es években néhány telepítés, mint például a Bendix-14, a 0 és 5 közötti számjegyeket részesítette előnyben, túlhúzással a 10–15 értékek 0 , 1 , 2 , 3 , 4 és 5 jelölésére .
  • A SWAC (1950) és a Bendix G-15 (1956) számítógépek az u , v , w , x , y és z kisbetűket használták a 10 és 15 közötti értékekhez.
  • Az ILLIAC I (1952) számítógép a K , S , N , J , F és L nagybetűket használta a 10-15 értékekhez.
  • Az LGP-30 Librascope (1956) F , G , J , K , Q és W betűket használt a 10 és 15 közötti értékekhez.
  • A Honeywell DATAMATIC D-1000 (1957-ben) használta a kisbetűk b , c , d , e , f , és g mivel a Elbit  100 (1967) használta a nagybetűk B , C , D , E , F és G értékeinek 10–15.
  • A Monrobot XI (1960) az S , T , U , V , W és X betűket használta a 10-15 értékekhez.
  • A NEEC 1103 (1960) NEC paraméteres számítógép D , G , H , J , K (és esetleg V ) betűket használt a 10–15 értékekhez.
  • A Pacific Data Systems 1020 (1964) L , C , A , S , M és D betűket használta a 10-15 értékekhez.
  • Boby Lapointe 1968-ban új számjeleket és neveket vezetett be a Bibi-bináris jelölésben . Ez a jelölés nem vált nagyon népszerűvé.
Bruce Alan Martin hexadecimális jelölési javaslata
  • Bruce Alan Martin, a Brookhaven National Laboratory munkatársa „nevetségesnek” tartotta az A – F választást. A CACM szerkesztőjének írt 1968 -as levelében egy teljesen új szimbólumkészletet javasolt a bithelyek alapján, amely nem sok elfogadást nyert.
  • Néhány hét szegmenses kijelző dekódoló chip (pl. 74LS47) váratlan kimenetet mutat a logika miatt, amely csak a 0-9 helyes előállítására szolgál.

Verbális és digitális ábrázolások

Nincsenek hagyományos számok, amelyek a tíz és tizenöt közötti mennyiségeket ábrázolják-a betűket helyettesítik-, és a legtöbb európai nyelvben nincs tizedes név a tíz feletti számokhoz. Annak ellenére, hogy az angol nyelvnek több nem tizedes hatványa van ( pár az első bináris hatalomért, pontszám az első legkisebb hatalomért, tucat , bruttó és nagy bruttó az első három duodecimális hatványért ), egyetlen angol név sem írja le a hexadecimális hatványokat (tizedes 16 , 256, 4096, 65536, ...). Vannak, akik hexadecimális számokat olvasnak számjegyről számjegyre, például egy telefonszámot, vagy a NATO fonetikus ábécéjét , a Joint Army/Navy fonetikus ábécét vagy hasonló ad-hoc rendszert használnak. Az IBM System/360 programozók körében a hexadecimális átvétel után Magnuson (1968) kiejtési útmutatót javasolt, amely rövid neveket adott a hexadecimális betűknek - például az "A" betűt "ann", a "bet" -t kiejtették, C "chris", stb. Egy másik elnevezési rendszert Babb (2015) dolgozott ki, egy tévésorozatból viccből. Rogers (2007) egy másik elnevezési rendszert tett közzé online, amely megpróbálja megkülönböztetni a verbális ábrázolást, még akkor is, ha a tényleges szám nem tartalmaz A – F számokat. Példák az alábbi táblázatokban találhatók.

Hexadecimális ujjszámlálási séma

Rendszerei számolás számjegyek dolgoztak ki a két bináris és hexadecimális. Arthur C. Clarke azt javasolta, hogy minden ujját használja ki/be bitként, lehetővé téve az ujjak számolását nullától 1023 10 -ig tíz ujjon. A jobb oldalon egy másik FF 16 (255 10 ) számlálási rendszer látható.

Magnusson (1968)
elnevezési módszer
Szám Kiejtés
A ann
B tét
C chris
D pont
E ernest
F fagy
1A annteen
A0 annty
5B ötven fogadás
A01C annty christeen
1AD0 annteen foltos
3A7D harmincéves hetvenpontos
Rogers (2007)
elnevezési módszer
Szám Kiejtés
A tíz
B tizenegy
C tizenkét
D fúj
E eptwin
F fim
10 tex
11 oneteek
1F fimteek
50 fiftek
C0 twelftek
100 hundrek
1000 ezer
3E thirtek-eptwin
E1 eptek-one
C4A tizenkét-hundrek-fourtek-ten
1743 egy-ezer-hét-
-hundrek-fourtek-hármat

Jelek

A hexadecimális rendszer ugyanúgy képes negatív számokat kifejezni, mint a decimális: −2A, hogy −42 10, és így tovább.

A hexadecimális a processzorban használt pontos bitminták kifejezésére is használható , így a hexadecimális számjegyek egy aláírt vagy akár lebegőpontos értéket is jelenthetnek . Ily módon a −42 10 negatív szám FFFF FFD6-ként írható egy 32 bites CPU-regiszterben ( két kiegészítésben ), C228 0000-ként 32 bites FPU- regiszterben vagy C045 0000 0000 0000-ban 64 bites FPU-ban regisztráljon (az IEEE lebegőpontos szabványban ).

Hexadecimális exponenciális jelölés

Ahogy a tizedes számok exponenciális jelöléssel is ábrázolhatók, a hexadecimális számok is. Megállapodás szerint a P betű (vagy p , "hatalom") a kettő szorzatát jelöli , míg E (vagy e ) hasonló célt szolgál tizedes számban az E jelölés részeként . A szám után a P van tizedes képviseli a bináris kitevő. A kitevő 1 -gyel való növelése 2 -gyel szoroz, nem 16 -mal. 10.0p1 = 8.0p2 = 4.0p3 = 2.0p4 = 1.0p5. Általában a számot úgy normalizálják, hogy a vezető hexadecimális számjegy 1 legyen (kivéve, ha az érték pontosan 0).

Példa: 1.3DEp42 jelentése 1.3DE 16  × 2 42 10 .

Az IEEE 754-2008 bináris lebegőpontos szabvány hexadecimális exponenciális jelölést ír elő . Ez a jelölés lebegőpontos literálokhoz használható a C programozási nyelv C99 kiadásában . A %a vagy %A konverziós specifikátorok használatával ezt a jelölést a printf függvénycsalád C99 és Single Unix Specification (IEEE Std 1003.1) POSIX szabvány szerinti megvalósításával lehet létrehozni.

Átalakítás

Bináris konverzió

A legtöbb számítógép manipulálja a bináris adatokat, de az embereknek nehéz nagyszámú számmal dolgozni még viszonylag kis bináris szám esetén is. Bár a legtöbb ember ismeri az alap 10 rendszert, sokkal könnyebb binárisat hexadecimálisra leképezni, mint tizedesre, mert mindegyik hexadecimális számjegy egész bitre leképeződik (4 10 ). Ez a példa az 1111 2 -t tízes bázissá alakítja . Mivel a bináris számok minden pozíciója tartalmazhat 1 -et vagy 0 -t, értéke könnyen meghatározható a jobb oldali pozíció alapján:

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

Ezért:

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

Kevés gyakorlattal egyszerűvé válik az 1111 2 és F 16 közötti leképezés egy lépésben: lásd az írásos ábrázolás táblázatát . A hexadecimális és a tizedes helyett a szám növekedésével gyorsan növekszik az előnye. Amikor a szám nagy lesz, a tizedesre konvertálás nagyon fárasztó. A hexadecimális leképezésnél azonban triviális, ha a bináris karakterláncot 4 számjegyű csoportnak tekintjük, és mindegyiket egyetlen hexadecimális számjegyhez rendeljük.

Ez a példa egy bináris szám tizedesre konvertálását mutatja, minden számjegyet a tizedes értékhez rendel, és hozzáadja az eredményeket.

(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

Hasonlítsa össze ezt a hexadecimálisra való átalakítással, ahol a négy számjegyből álló csoportok egymástól függetlenül is figyelembe vehetők és közvetlenül konvertálhatók:

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

A hexadecimálisból binárisra való átalakítás ugyanolyan közvetlen.

Egyéb egyszerű átalakítások

Bár kvaterner (bázis 4) csak kevéssé alkalmazzák, könnyen átalakítható, és a hexadecimális vagy bináris. Minden hexadecimális számjegy egy negyedik számjegynek felel meg, és minden negyedik számjegy egy bináris számjegypárnak. A fenti példában 5 E B 5 2 16 = 11 32 23 11 02 4 .

Az oktális (8. bázis) rendszer is viszonylag könnyen átalakítható, bár nem olyan triviálisan, mint a 2. és 4. bázis esetében. Minden nyolc számjegy három bináris számjegynek felel meg, nem pedig négynek. Ezért átválthatunk oktális és hexadecimális értékeket egy köztes bináris átalakítással, majd a bináris számjegyeket három vagy négy fős csoportokba csoportosítjuk át.

Osztály-maradék a forrásbázisban

Mint minden bázis esetében, itt is van egy egyszerű algoritmus egy szám ábrázolásának hexadecimálissá alakítására úgy, hogy egész osztást és maradék műveleteket végez a forrásbázisban. Elméletileg ez bármilyen alapból lehetséges, de a legtöbb ember számára csak a tizedes, a legtöbb számítógép esetében csak a bináris (amely sokkal hatékonyabb módszerekkel konvertálható) könnyen kezelhető ezzel a módszerrel.

Legyen d a szám hexadecimális számban, a h i h i − 1 ... h 2 h 1 sorozat pedig a számot jelző hexadecimális számjegy.

  1. i ← 1
  2. h i ← d mod 16
  3. d ← (d - h i ) / 16
  4. Ha d = 0 (visszatérési sorozat i ), akkor növelje az i lépést, és folytassa a 2. lépéssel

A "16" helyettesíthető bármilyen más, kívánt alappal.

Az alábbiakban a fenti algoritmus JavaScript -megvalósítása látható, amely bármilyen számot hexadecimálissá alakít a karakterlánc -ábrázolásban. Célja a fenti algoritmus illusztrálása. Ha azonban komolyan akarunk dolgozni az adatokkal, sokkal tanácsosabb a bitenkénti operátorokkal dolgozni .

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

Konverzió összeadás és szorzás révén

Hexadecimális szorzótábla

Az is lehetséges, hogy a konverziót úgy végezzük el, hogy a forrásbázis minden egyes helyéhez hozzárendeljük a helyérték hexadecimális ábrázolását - a szorzás és összeadás elvégzése előtt, hogy megkapjuk a végső ábrázolást. Például, ha a B3AD számot decimálissá akarjuk konvertálni, a hexadecimális számot fel lehet osztani számjegyeire: B (11 10 ), 3 (3 10 ), A (10 10 ) és D (13 10 ), majd megkapjuk a végső értéket az eredményt úgy, hogy minden tizedes ábrázolást megszorozunk 16 p -val ( p a megfelelő hexadecimális pozíció, jobbról balra számolva, 0 -val kezdődően). Ebben az esetben nálunk ez van:

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

ami 45997 a 10. bázisban.

Eszközök a konverzióhoz

A legtöbb modern számítógépes rendszer grafikus felhasználói felülettel rendelkezik egy beépített számológép segédprogrammal, amely képes átalakítani a különböző sugárzásokat, és a legtöbb esetben tartalmazza a hexadecimális értéket is.

A Microsoft Windows rendszerben a Számológép segédprogram tudományos módra állítható (egyes verziókban programozó módnak nevezik), amely lehetővé teszi a konverziókat a radix 16 (hexadecimális), 10 (tizedes), 8 ( oktális ) és 2 ( bináris ) között. általában a programozók használják. Tudományos módban a képernyőn megjelenő számbillentyűzet tartalmazza az A – F hexadecimális számjegyeket, amelyek aktívak a „Hex” kiválasztásakor. Hexa módban azonban a Windows számológép csak egész számokat támogat.

Elemi számtan

Az olyan elemi műveletek, mint az összeadás, a kivonás, a szorzás és az osztás, közvetett módon is elvégezhetők egy alternatív számrendszerbe , például az általánosan használt tizedesrendszerbe vagy bináris rendszerbe való átalakítással, ahol minden hexadecimális számjegy négy bináris számjegynek felel meg.

Alternatív megoldásként az elemi műveleteket közvetlenül a hexa -rendszeren belül is elvégezheti - támaszkodva annak összeadási/szorzótábláira és a megfelelő szabványos algoritmusokra, például a hosszú osztásra és a hagyományos kivonási algoritmusra.

Valós számok

Racionális számok

Más számrendszerekhez hasonlóan a hexadecimális rendszer is használható a racionális számok ábrázolására , bár az ismétlődő bővítések gyakoriak, mivel tizenhatnak (10 16 ) csak egyetlen prímtényezője van; kettő.

Bármely bázis esetében a 0,1 (vagy "1/10") mindig egyenlő az osztott értékkel, osztva az alapérték reprezentációjával a saját számrendszerében. Így függetlenül attól, hogy osztjuk -e kettővel a bináris értéket, vagy osszuk el a tizenhatot a hexadecimális számmal, mindkét törtet a következőképpen írjuk fel 0.1. Mivel a 16 sugár tökéletes négyzet (4 2 ), a hexadecimális törteknél a páratlan periódus sokkal gyakrabban fordul elő, mint a tizedes, és nincsenek ciklikus számok (a triviális egyjegyű számjegyeken kívül). Az ismétlődő számjegyek akkor jelennek meg, ha a legalacsonyabb nevezőnek van egy prímtényezője, amely nem található a radixban; így hexadecimális jelölés használatakor minden olyan nevezővel rendelkező tört, amely nem kettes hatvány, végtelen számú ismétlődő számjegyet eredményez (például harmadik és ötödik). Ezáltal a hexadecimális (és bináris) kevésbé kényelmes, mint a decimális a racionális számok ábrázolásához, mivel nagyobb részük kívül esik a véges ábrázolás tartományán.

Minden racionális szám, amely hexadecimálisan végesen ábrázolható, decimális, duodecimális és nemi számjeggyel is végesen reprezentálható : vagyis minden véges számjegyű hexadecimális számnak szintén van véges számú számjegye, ha más bázisokban fejezzük ki. Ezzel szemben az utóbbi bázisokban végesen reprezentálhatóaknak csak töredéke hexadecimálisan végesen reprezentálható. Például a 0,1 decimális a hexadecimális 0,1 9 végtelen ismétlődő ábrázolásnak felel meg . A hexadecimális azonban hatékonyabb, mint a duodecimális és a sexagesimal, amikor a kettes hatványú törteket ábrázoljuk a nevezőben. Például a 0,0625 10 (tizenhatodik) egyenértékű 0,1 16 , 0,09 12 és 0; 3,45 60 értékekkel .

n
A bázis decimális prímtényezői, b = 10: 2 , 5 ; b - 1 = 9: 3 ; b + 1 = 11: 11

A bázis hexadecimális prímtényezői, b = 16 10 = 10: 2 ; b - 1 = 15 10 = F: 3, 5 ; b + 1 = 17 10 = 11: 11
Töredék elsődleges tényezők Pozicionális ábrázolás Pozicionális ábrázolás elsődleges tényezők Töredé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

Irracionális számok

Az alábbi táblázat néhány általános irracionális szám kibővítését mutatja tizedes és hexadecimális számokban .

Szám Pozicionális ábrázolás
Decimális Hexadecimális
2 (az egység négyzetének átlójának hossza ) 1,414 213 562 373 095 048 ... 1.6A09E667F3BCD ...
3 (a hossza a diagonális egy egység kocka ) 1,732 050 807 568 877 293 ... 1.BB67AE8584CAA ...
5 ( 1 × 2 téglalap átlójának hossza ) 2,236 067 977 499 789 696 ... 2.3C6EF372FE95 ...
φ (phi, az aranymetszés = (1+ 5 )/2 ) 1.618 033 988 749 894 848 ... 1.9E3779B97F4A ...
π (pi, a kör kerületének és átmérőjének aránya ) 3,141 592 653 589 793 238 462 643
383 279 502 884 197 169 399 375 105 ...
3.243F6A8885A308D313198A2E0
3707344A4093822299F31D008 ...
e (a természetes logaritmus alapja ) 2,718 281 828 459 045 235 ... 2.B7E151628AED2A6B ...
τ (a Thue -Morse állandó ) 0,412 454 033 640 107 597 ... 0,6996 9669 9669 6996 ...
γ (a korlátozó különbség a
harmonikus sorozat és a természetes logaritmus között)
0,577 215 664 901 532 860 ... 0,93C467E37DB0C7A4D1B ...

Hatalmak

A kéttagú hatalmak hexadecimális számban nagyon egyszerűek. A kettő közül az első tizenhat hatvány az alábbiakban látható.

2 x Érték Érték (tizedes)
2 0 1 1
2 1 2 2
2 2 4 4
2 3 8 8
2 4 10 hatszög December 16
2 5 20 hatszög 32 dec
2 6 40 hatszög 64 dec
2 7 80 hatszög 128 dec
2 8 100 hatszög 256 dec
2 9 200 hatszög 512 dec
2 A (2 10 dec ) 400 hatszög 1024 dec
2 B (2 11 dec ) 800 hatszög 2048 dec
2 C (2 12 dec ) 1000 hatszög 4096 dec
2 D (2 13 dec ) 2000 hatszög 8192 dec
2 E (2 14 dec ) 4000 hatszög 16.384 dec
2 F (2 15 dec ) 8000 hatszög 32 768 dec
2 10 (2 16 dec ) 10000 hatszög 65 536 dec

Kultúrtörténet

A hagyományos kínai mértékegységek bázis-16 voltak. Például egy jīn (斤) a régi rendszerben tizenhat tael . A suanpan (kínai abacus ) használható hexadecimális számítások, például összeadások és kivonások elvégzésére.

A duodecimális rendszerhez hasonlóan, időnként kísérletek történtek a hexadecimális számszerű rendszer népszerűsítésére. Ezek a kísérletek gyakran konkrét kiejtést és szimbólumokat javasolnak az egyes számokhoz. Néhány javaslat egyesíti a szokásos intézkedéseket, így azok többszörösei a 16 -nak. Egy korai ilyen javaslatot John W. Nystrom terjesztett elő a Project of a New System of Arithmetic, Weight, Measure and Coins: Proposed to the Tonal System, with Sixteen című számban. a Base kiadású 1862. Nystrom egyebek javasolt hexadecimális időt , amely osztja a nap 16 úgy, hogy a 16 „óra” (vagy „10 TIMS ”, markáns tontim ) egy nap alatt.

A szó hexadecimális először rögzített 1952-ben, zagyva abban az értelemben, hogy ötvözi a görög ἕξ (hex) „hat” a latinos -decimal . Az egész Latin alternatív sexadecimal (vö szó hatvanas alaplapra 60) idősebb, és úgy látja, legalább alkalmi használatra a 19. század végén. Az 1950 -es években még mindig használatban van a Bendix dokumentációjában. Schwartzman (1994) azzal érvel, hogy a sexadecimális használat elkerülhető lett volna a szexre utaló rövidítése miatt . Az 1960 -as évek óta számos nyugati nyelv a hexadecimális formátumnak megfelelő kifejezéseket fogadott el (pl. Francia hexadecimális , olasz esadecimale , román hexazecimális , szerb хексадецимални stb.), De mások olyan kifejezéseket is bevezettek, amelyek helyettesítik a "tizenhat" natív szavait (pl. Görög sextándakerfi , orosz шестнадцатеричной stb.)

A terminológia és a jelölés csak a hatvanas évek végén vált rendezetté. Donald Knuth 1969 -ben azzal érvelt, hogy az etimológiailag helyes kifejezés az öregségi vagy esetleg az ülő , latin nyelvű kifejezés, amelynek célja a "16" csoportba sorolása , bináris , terner és kvaterner minták alapján . Knuth érvelése szerint a tizedes és oktális helyes kifejezések számtani lenne tizedes és octonary , ill. Alfred B. Taylor az 1800-as évek közepén alternatív számbázisokon végzett munkájában használta a senidenary -t, bár elutasította a 16-os bázist, mert "kellemetlen számjegye" volt.

Az A-F betűket használó, mostani jelölés 1966-tól kezdődően de facto szabványnak minősül, az IBM System/360 Fortran IV kézikönyvének kiadása nyomán , amely (ellentétben a Fortran korábbi változataival) szabványt ismer fel hexadecimális állandók megadásához. Amint fentebb megjegyeztük, alternatív jelöléseket használt a NEC (1960) és a The Pacific Data Systems 1020 (1964). Úgy tűnik, hogy az IBM által elfogadott szabványt széles körben elfogadták 1968 -ra, amikor Bruce Alan Martin a CACM szerkesztőjének írt levelében azt kifogásolja, hogy

"Mivel az A, B, C, D, E, F betűk nevetséges választása hexadecimális számjelekként növeli az amúgy is nehézségeket okozó oktális (vagy hexadecimális) számok megkülönböztetését a tizedes számoktól (vagy változónevektől), az idő túlérett az újragondolásra. Ezt meg kellett volna tenni, mielőtt a rossz döntések de facto színvonalossá váltak! "

Martin érve az volt, hogy a 0 és 9 közötti számok használata nem decimális számokban "számunkra egy tízes alapértékű helyérték-sémát jelent": "Miért ne használhatnánk teljesen új szimbólumokat (és neveket) a nyolc vagy hexadecimális hét vagy tizenöt nem számjegyhez? "Még az A -P betűk használata is javulást jelentene, de teljesen új szimbólumok tükrözhetik a rendszer bináris jellegét."


Base16 (átviteli kódolás)

A Base16 (szóköz nélküli tulajdonnévként) binárisra is utalhat a Base32 , Base58 és Base64 családhoz tartozó szövegkódolásra .

Ebben az esetben az adatok 4 bites szekvenciákra vannak bontva, és minden értéket (0 és 15 között) az ASCII karakterkészlet 16 szimbólumával kódolnak . Bár az ASCII karakterkészlet bármely 16 szimbóluma használható, a gyakorlatban az ASCII „0” - „9” számjegyeket és az „A” - „F” betűket (vagy a kisbetűket „a” - „f”) mindig választják annak érdekében, hogy megfeleljen a hexadecimális számok szabványos írásos jelölésének.

A Base16 kódolásnak számos előnye van:

  • A legtöbb programozási nyelv már rendelkezik az ASCII kódolású hexadecimális elemzésével
  • Mivel pontosan fél bájt, a 4 bites feldolgozás könnyebb, mint a Base32 és a Base64 5 vagy 6 bitje
  • A 0-9 és az AF szimbólumok univerzálisak hexadecimális jelöléssel, így könnyen érthető egy pillanat alatt, anélkül, hogy a szimbólumkeresési táblázatra kellene támaszkodnia
  • Számos CPU-architektúra dedikált utasítással rendelkezik, amely lehetővé teszi a hozzáférést egy fél bájthoz (más néven " rágcsálnivaló "), így hardveresen hatékonyabb, mint a Base32 és a Base64

A Base16 kódolás fő hátrányai a következők:

  • A térhatékonyság csak 50%, mivel az eredeti adatokból származó minden 4 bites érték 8 bites bájtként lesz kódolva. Ezzel szemben a Base32 és a Base64 kódolás területi hatékonysága 63%, illetve 75%.
  • Lehetséges bonyolultság a nagy- és kisbetűk elfogadása miatt

A Base16 kódolás támogatása mindenütt jelen van a modern számítástechnikában. Ez az alapja a W3C szabványnak az URL százalékos kódolására , ahol a karaktert a "%" százalékjel és a Base16 kódolású forma helyettesíti. A legtöbb modern programozási nyelv közvetlenül támogatja a Base16 kódolású számok formázását és elemzését.

Lásd még

Hivatkozások