Шестнайсетична бройна система: Разлика между версии

от Уикипедия, свободната енциклопедия
Изтрито е съдържание Добавено е съдържание
Dgavrailov (беседа | приноси)
Редакция без резюме
Ред 1: Ред 1:
'''Шестнадесетичната бройна система''' е [[Бройна система#Позиционни бройни системи|позиционна бройна система]], в която числата се представят с помощта на 16 динамични символа. Символите от '''0-9''' са представени чрез [[арабски цифри]], а латинските букви '''A, B, C, D, E, F (или a-f)''' взимат стойностите от 10-15. Всяка шестнадесетична цифра се представя като група от четири двоични цифри ([[бит]]). Причина за това е, че за съхраняването на данните в оперативната памет на електронноизчислителни машини се използва двоичен код.
'''Шестнайсетичната бройна система''' е [[Бройна система#Позиционни бройни системи|позиционна бройна система]], в която числата се представят с помощта на 16 динамични символа. Символите от '''0-9''' са представени чрез [[арабски цифри]], а латинските букви '''A, B, C, D, E, F (или a-f)''' взимат стойностите от 10-15. Всяка шестнайсетична цифра се представя като група от четири двоични цифри ([[бит]]). Причина за това е, че за съхраняването на данните в оперативната памет на електронноизчислителни машини се използва двоичен код.


== Представяне ==
== Представяне ==
Ред 301: Ред 301:
</table>
</table>


За да не се обърква представянето на символите в различните бройни системи се използват няколко установени практики. Една от тях е при изписването на знаците да се слага долен индекс, който показва основата на бройната система. Например 119<sub>10</sub> в десетична и е равно на 77<sub>16</sub> в шестнадесетична. Други предпочитат индекса да е текстов 119<sub>decimal</sub> или 119<sub>d</sub> - десетична, 77<sub>hex</sub> или 77<sub>h</sub>– шестнадесетична. Изписването на отрицателни числа става по същият начин както и в десетична бройна система с "-".
За да не се обърква представянето на символите в различните бройни системи се използват няколко установени практики. Една от тях е при изписването на знаците да се слага долен индекс, който показва основата на бройната система. Например 119<sub>10</sub> в десетична и е равно на 77<sub>16</sub> в шестнайсетична. Други предпочитат индекса да е текстов 119<sub>decimal</sub> или 119<sub>d</sub> - десетична, 77<sub>hex</sub> или 77<sub>h</sub>– шестнайсетична. Изписването на отрицателни числа става по същият начин както и в десетична бройна система с "-".


При разработката на софтуер са разработи различни методи за представянето на шестнадесетичните символи:
При разработката на софтуер са разработи различни методи за представянето на шестнайсетичните символи:
* В URIs (както и в [[URL]]s), низ от символи написан като шестнадесетична двойка се изписва с „%“: <code><nowiki>http://www.example.com/name%20with%20spaces</nowiki></code>, където %20 е празното място между знаците (стойности 20<sub>16</sub> и 32<sub>10</sub>).
* В URIs (както и в [[URL]]s), низ от символи написан като шестнайсетична двойка се изписва с „%“: <code><nowiki>http://www.example.com/name%20with%20spaces</nowiki></code>, където %20 е празното място между знаците (стойности 20<sub>16</sub> и 32<sub>10</sub>).
* В [[XML]] и [[XHTML]] знаците могат да бъдат изразени с аритметични код като „&#xcode“, където „code“ e 1-6 цифрено шестнадесетично число добавено към символ от [Уникод|Unicode]. Вследствие &#x007А е еквивалент на „z“([[Уникод|Unicode]] стойност 007А, десетична 122)
* В [[XML]] и [[XHTML]] знаците могат да бъдат изразени с аритметични код като „&#xcode“, където „code“ e 1-6 цифрено шестнайсетично число добавено към символ от [Уникод|Unicode]. Вследствие &#x007А е еквивалент на „z“([[Уникод|Unicode]] стойност 007А, десетична 122)
*Цветовата гама в [[HTML]], [[CSS]] и X Windows могат да бъдат изразени с шест цифрен шестнадесетичен код (по две за червено, зелено и синьо, подредени в този ред) предхождан с #: бялото се възпроизвежда с #FFFFFF. В [CSS] това може да се представи и с 3 знака #FFF(бяло)
*Цветовата гама в [[HTML]], [[CSS]] и X Windows могат да бъдат изразени с шест цифрен шестнайсетичен код (по две за червено, зелено и синьо, подредени в този ред) предхождан с #: бялото се възпроизвежда с #FFFFFF. В [CSS] това може да се представи и с 3 знака #FFF(бяло)
* В програмни езици като [[C++]], [[C Sharp|C#]], [[Java]], [[JavaScript]], [[Python]] и Windows PowerShell се пише 0x пред шестнадесетичното число:0xA12. Символи или символни низове могат да се представят с \x последвани от два шестнадесетични символа:\x1B.а
* В програмни езици като [[C++]], [[C Sharp|C#]], [[Java]], [[JavaScript]], [[Python]] и Windows PowerShell се пише 0x пред шестнайсетичното число:0xA12. Символи или символни низове могат да се представят с \x последвани от два шестнайсетични символа:\x1B.а
* Други езици като [[Паскал (език)|Pascal]], [[Delphi]], някои версии на [[BASIC]] ( Commodore ), GML и [[Forth]] използвате $ като префикс: $ 5A3.ac
* Други езици като [[Паскал (език)|Pascal]], [[Delphi]], някои версии на [[BASIC]] ( Commodore ), GML и [[Forth]] използвате $ като префикс: $ 5A3.ac
* В [http://bg.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4 Unicode] стандарт, символна стойност се представя с U + следвана от шестнадесетичен стойност: U +03B1 - гръцката буква алфа (α).
* В [http://bg.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4 Unicode] стандарт, символна стойност се представя с U + следвана от шестнайсетичен стойност: U +03B1 - гръцката буква алфа (α).
* Всички [[IPv6]] адреси могат да бъдат записани като осем групи от по четири шестнадесетични цифри, където всяка група е отделена от двоеточие ( : ).Валиден [[IPv6]] адрес: 2001:0 db8: 85a3: 0000:0000:8 A2E: 0370:7334
* Всички [[IPv6]] адреси могат да бъдат записани като осем групи от по четири шестнайсетични цифри, където всяка група е отделена от двоеточие ( : ).Валиден [[IPv6]] адрес: 2001:0 db8: 85a3: 0000:0000:8 A2E: 0370:7334


=== Ранните писмени представяния ===
=== Ранните писмени представяния ===
Ред 317: Ред 317:
* The Librascope LGP-30 използва букви F, G, J, K, Q и W.
* The Librascope LGP-30 използва букви F, G, J, K, Q и W.


== Ранно използване на шестнадесетична бройна система в компютъра ==
== Ранно използване на шестнайсетична бройна система в компютъра ==
[[Двоична бройна система|Двоичната бройна система]] е много добра за [[Компютър|компютрите]], но има малък недостатък – броят на цифрите расте неимоверно бързо. Както се оказва, има и друга бройна схема, която също е благоприятна за компютрите: '''шестнадесетичната'''. Преди години, когато компютърът е бил все още съвсем ново откритие, хората, които го проектирали осъзнали, че трябва да се създаде '''стандарт''' за съхранение на информация. Тъй като компютрите могат да смятат само с двоични числа - '''букви, текст''' и други символи трябвало да бъдат съхранени като числа. Но притеснението им не е било само това. Те трябвало да се уверят, че числото, което, представя примерно ‘А’, ще бъде едно и също на всички компютри. За да се улесни това се създала [[ASCII]] (от Английски език – '''American Standard Code for Information Interchange''') таблицата. В нея има невидими символи, които изпълняват определи функции, като отместване на указателя (09), звън (07). Могат да се използват различни комбинации на само осем двоични цифри, или битове, за да се представи всеки символ на ASCII графиката.
[[Двоична бройна система|Двоичната бройна система]] е много добра за [[Компютър|компютрите]], но има малък недостатък – броят на цифрите расте неимоверно бързо. Както се оказва, има и друга бройна схема, която също е благоприятна за компютрите: '''шестнайсетичната'''. Преди години, когато компютърът е бил все още съвсем ново откритие, хората, които го проектирали осъзнали, че трябва да се създаде '''стандарт''' за съхранение на информация. Тъй като компютрите могат да смятат само с двоични числа - '''букви, текст''' и други символи трябвало да бъдат съхранени като числа. Но притеснението им не е било само това. Те трябвало да се уверят, че числото, което, представя примерно ‘А’, ще бъде едно и също на всички компютри. За да се улесни това се създала [[ASCII]] (от Английски език – '''American Standard Code for Information Interchange''') таблицата. В нея има невидими символи, които изпълняват определи функции, като отместване на указателя (09), звън (07). Могат да се използват различни комбинации на само осем двоични цифри, или битове, за да се представи всеки символ на ASCII графиката.
'''128 знака''' можели да изглеждат много, но не след дълго разработчиците забелязали липсата на много от специалните гласни, използвани от '''[[Латински език|латинския език]]''', различни от [[Английски език|английския език]] като например: ä, é, û и Æ. Също липсвали и математически символи (±, µ, °, ¼) и знаци за парични валути, различни от ($) като (£, ¥, ¢). За да се компенсира тази липса, '''ASCII''' таблицата била разширена от '''128''' на '''256''' символа.
'''128 знака''' можели да изглеждат много, но не след дълго разработчиците забелязали липсата на много от специалните гласни, използвани от '''[[Латински език|латинския език]]''', различни от [[Английски език|английския език]] като например: ä, é, û и Æ. Също липсвали и математически символи (±, µ, °, ¼) и знаци за парични валути, различни от ($) като (£, ¥, ¢). За да се компенсира тази липса, '''ASCII''' таблицата била разширена от '''128''' на '''256''' символа.


Стойността на 256 може да бъде представена като шестнадесет на втора степен, което ни връща към '''шестнадесетична бройна система'''. Оказва се, че всеки символ на ASCII таблицата може да се представи чрез двуцифрено число в шестнадесетична бройна система – от 00 до FF.
Стойността на 256 може да бъде представена като шестнайсет на втора степен, което ни връща към '''шестнайсетична бройна система'''. Оказва се, че всеки символ на ASCII таблицата може да се представи чрез двуцифрено число в шестнайсетична бройна система – от 00 до FF.


== Преобразуване ==
== Преобразуване ==
Човек е свикнал да работи в десетична бройна система, но компютрите работят в двоична бройна система ( съставена само от 0-ли и 1-ци ). Целта на шестнадесетичната бройна система е да помогне на хората, когато работят с големи числа.
Човек е свикнал да работи в десетична бройна система, но компютрите работят в двоична бройна система (съставена само от 0-ли и 1-ци). Целта на шестнайсетичната бройна система е да помогне на хората, когато работят с големи числа.


{| class="prettytable" style="text-align:center"
{| class="prettytable" style="text-align:center"
Ред 363: Ред 363:
|}
|}


=== От Двоична в Шестнадесетична ===
=== От Двоична в Шестнайсетична ===
Ако искаме да сметнем числото 01101000101000101111 <sub>(2)</sub> до число с база <sub>(16)</sub>, първо се разделя двоичното число на групи от по четири:
Ако искаме да сметнем числото 01101000101000101111 <sub>(2)</sub> до число с база <sub>(16)</sub>, първо се разделя двоичното число на групи от по четири:


Ред 382: Ред 382:
Когато се съберат се получава, че 01101000101000101111 <sub>(2)</sub> = 68A2F<sub>(16)</sub>.
Когато се съберат се получава, че 01101000101000101111 <sub>(2)</sub> = 68A2F<sub>(16)</sub>.


=== От Шестнадесетична в Двоична ===
=== От Шестнайсетична в Двоична ===
Числото 68A2F<sub>(16)</sub> в двоична бройна система:
Числото 68A2F<sub>(16)</sub> в двоична бройна система:


Ред 397: Ред 397:
Когато се съберат се получава, че = 68A2F<sub>(16)</sub> = 01101000101000101111 <sub>(2)</sub>.
Когато се съберат се получава, че = 68A2F<sub>(16)</sub> = 01101000101000101111 <sub>(2)</sub>.


=== От Десетична в Шестнадесетична ===
=== От Десетична в Шестнайсетична ===
Имаме числото 428591. Всяка цифра се разделя на 16 и се взима нейният остатък. Полученото от делението число делим отново на 16, дотогава докато се получи 0 за резултат. Получените от остатъка числа се вземат отзад напред (от последното деление до първото) и се получава числото в шестнадесетична бройна система.
Имаме числото 428591. Всяка цифра се разделя на 16 и се взима нейният остатък. Полученото от делението число делим отново на 16, дотогава докато се получи 0 за резултат. Получените от остатъка числа се вземат отзад напред (от последното деление до първото) и се получава числото в шестнайсетична бройна система.


{| border="0"
{| border="0"
Ред 462: Ред 462:
</source></big>
</source></big>


=== От Шестнадесетична в Десетична ===
=== От Шестнайсетична в Десетична ===
Имаме числото 68A2F<sub>(16)</sub>. Взимат се цифрите отзад напред, всяка се умножава с 16<sup>[0..n]</sup>. Резултатът се събира.
Имаме числото 68A2F<sub>(16)</sub>. Взимат се цифрите отзад напред, всяка се умножава с 16<sup>[0..n]</sup>. Резултатът се събира.


Ред 480: Ред 480:
15 + 32 + 2560 + 32768 + 393216 = 428591
15 + 32 + 2560 + 32768 + 393216 = 428591


И получаме че 68A2F<sub>(16)</sub> = 428591<sub>(10)</sub>.
И получаваме, че 68A2F<sub>(16)</sub> = 428591<sub>(10)</sub>.


Това е C# имплементация на горния алгоритъм
Това е C# имплементация на горния алгоритъм
Ред 518: Ред 518:
Съвременните операционни системи с графичен интерфейс предлагат калкулатори, способни да преминават през различни бройни системи.
Съвременните операционни системи с графичен интерфейс предлагат калкулатори, способни да преминават през различни бройни системи.


Във [[Microsoft Windows]], на калкулаторът може да бъде зададен научен стил/програмистки стил, който предлага преобразуване от [[двоична бройна система|двоична]], [[осмична бройна система|осмична]], [[десетична бройна система|десетична]] и шестнадесетична бройни системи. За шестнадесетична бройна система има специални бутони от A до F, които стават активни, когато се избере бройната система(Hex). Но в шестнадесетичен стил калкулаторът може да смята само цели числа.
Във [[Microsoft Windows]], на калкулаторът може да бъде зададен научен стил/програмистки стил, който предлага преобразуване от [[двоична бройна система|двоична]], [[осмична бройна система|осмична]], [[десетична бройна система|десетична]] и шестнайсетична бройни системи. За шестнайсетична бройна система има специални бутони от A до F, които стават активни, когато се избере бройната система(Hex). Но в шестнайсетичен стил калкулаторът може да смята само цели числа.


В [[Ubuntu]], калкулаторът има научен изглед, който също поддържа пресмятането от различни бройни системи, което включва шестнадесетична. Също както във [[Microsoft Windows]], има специални бутони от A до F.
В [[Ubuntu]], калкулаторът има научен изглед, който също поддържа пресмятането от различни бройни системи, което включва шестнайсетична. Също както във [[Microsoft Windows]], има специални бутони от A до F.


В [[Mac OS X]] вграденият калкулатор не поддържа пресмятането на различни бройни системи.
В [[Mac OS X]] вграденият калкулатор не поддържа пресмятането на различни бройни системи.
Ред 531: Ред 531:
Като ''0b'' винаги стои пред числото, за което се търси.
Като ''0b'' винаги стои пред числото, за което се търси.


При шестнадесетична -> 0x23A1F
При шестнайсетична -> 0x23A1F


Като ''0x'' винаги стои пред числото, за което се търси.
Като ''0x'' винаги стои пред числото, за което се търси.
Ред 545: Ред 545:


== Степени ==
== Степени ==
Най-широко използваната степен, тази на двойката, е лесна за представянето на числа в шестнадесетична бройна система. Примери за степени на двойката са показани по-долу:
Най-широко използваната степен, тази на двойката, е лесна за представянето на числа в шестнайсетична бройна система. Примери за степени на двойката са показани по-долу:


{| class="wikitable"
{| class="wikitable"
Ред 584: Ред 584:
|}
|}


Дори по-лесна за използване е степента на четворката, защото квадратът на четири прави шестнадесет – основата на шестнадесетичната бройна система. Примери за степени на четворката са показани по-долу:
Дори по-лесна за използване е степента на четворката, защото квадратът на четири прави шестнайсет – основата на шестнайсетичната бройна система. Примери за степени на четворката са показани по-долу:


{| class="wikitable"
{| class="wikitable"
Ред 611: Ред 611:
== Култура ==
== Култура ==
=== Етимология ===
=== Етимология ===
Думата '''хексадесимал''' е съставена от '''хекса-''' (от [[Гръцки език]] – „шест”) и '''–десимал''' (от [[Латински език]] – „десет”). За първи път думата хексадесимал, заместваща ранната латинска интерпретация - '''сексадесимал''', се появява през 1954 година. Думата шестдесетичен (за '''шестдесетична бройна система''') запазва латинското си название „'''сексагесимал'''”. Доналд Кнут е посочил, че правилният термин е „'''сенидъри'''”(от Английски – „senidery”) за латинското наименувание – „групирани по 16”. Алфред Б. Тейлър е използвал „сенидъри” в средата на 18 век в неговата документация за алтернативни бройни системи, въпреки че той отхвърля използването на шестнадесетична бройна система заради „неудобния брой цифри”. Шварцман отбелязва, че шестнадесетичната бройна система трябва да носи наименуванието си от Латински, а именно – „сексадесимал”. Но неговите опасения са, че компютърните хакери биха съкратили думата просто на „секс”. Етимологическото правилно гръцко понятие би било „'''хексадъкейдик'''” (въпреки че в съвременния гръцки език е по-разпространено „'''дека-хексадик'''”).
Думата '''хексадесимал''' е съставена от '''хекса-''' (от [[Гръцки език]] – „шест”) и '''–десимал''' (от [[Латински език]] – „десет”). За първи път думата хексадесимал, заместваща ранната латинска интерпретация - '''сексадесимал''', се появява през 1954 година. Думата шестдесетичен (за '''шестдесетична бройна система''') запазва латинското си название „'''сексагесимал'''”. Доналд Кнут е посочил, че правилният термин е „'''сенидъри'''”(от Английски – „senidery”) за латинското наименувание – „групирани по 16”. Алфред Б. Тейлър е използвал „сенидъри” в средата на 18 век в неговата документация за алтернативни бройни системи, въпреки че той отхвърля използването на шестнайсетична бройна система заради „неудобния брой цифри”. Шварцман отбелязва, че шестнайсетичната бройна система трябва да носи наименуванието си от Латински, а именно – „сексадесимал”. Но неговите опасения са, че компютърните хакери биха съкратили думата просто на „секс”. Етимологическото правилно гръцко понятие би било „'''хексадъкейдик'''” (въпреки че в съвременния гръцки език е по-разпространено „'''дека-хексадик'''”).


=== Използване в китайската култура ===
=== Използване в китайската култура ===
Традиционните китайски единици за тегло са в шестнадесетична бройна система. Например, един джин в старата система се равнява на шестнадесет таела. Китайското сметало може да се използва за извършване на шестнадесетични изчисления.
Традиционните китайски единици за тегло са в шестнайсетична бройна система. Например, един джин в старата система се равнява на шестнайсет таела. Китайското сметало може да се използва за извършване на шестнайсетични изчисления.


== Основни абревиатури ==
== Основни абревиатури ==
Ред 627: Ред 627:
| Десетична ({{lang-en|decimal}}) || dec || 10
| Десетична ({{lang-en|decimal}}) || dec || 10
|-
|-
| Шестнадесетична ({{lang-en|hexadecimal}}) || hex || 16
| Шестнайсетична ({{lang-en|hexadecimal}}) || hex || 16
|}
|}



Версия от 12:10, 22 ноември 2017

Шестнайсетичната бройна система е позиционна бройна система, в която числата се представят с помощта на 16 динамични символа. Символите от 0-9 са представени чрез арабски цифри, а латинските букви A, B, C, D, E, F (или a-f) взимат стойностите от 10-15. Всяка шестнайсетична цифра се представя като група от четири двоични цифри (бит). Причина за това е, че за съхраняването на данните в оперативната памет на електронноизчислителни машини се използва двоичен код.

Представяне

Писмено представяне

Използване на 0–9 и A–F

ca
0hex = 0dec = 0oct 0 0 0 0
1hex = 1dec = 1oct 0 0 0 1
2hex = 2dec = 2oct 0 0 1 0
3hex = 3dec = 3oct 0 0 1 1
4hex = 4dec = 4oct 0 1 0 0
5hex = 5dec = 5oct 0 1 0 1
6hex = 6dec = 6oct 0 1 1 0
7hex = 7dec = 7oct 0 1 1 1
8hex = 8dec = 10oct 1 0 0 0
9hex = 9dec = 11oct 1 0 0 1
Ahex = 10dec = 12oct 1 0 1 0
Bhex = 11dec = 13oct 1 0 1 1
Chex = 12dec = 14oct 1 1 0 0
Dhex = 13dec = 15oct 1 1 0 1
Ehex = 14dec = 16oct 1 1 1 0
Fhex = 15dec = 17oct 1 1 1 1

За да не се обърква представянето на символите в различните бройни системи се използват няколко установени практики. Една от тях е при изписването на знаците да се слага долен индекс, който показва основата на бройната система. Например 11910 в десетична и е равно на 7716 в шестнайсетична. Други предпочитат индекса да е текстов 119decimal или 119d - десетична, 77hex или 77h– шестнайсетична. Изписването на отрицателни числа става по същият начин както и в десетична бройна система с "-".

При разработката на софтуер са разработи различни методи за представянето на шестнайсетичните символи:

  • В URIs (както и в URLs), низ от символи написан като шестнайсетична двойка се изписва с „%“: http://www.example.com/name%20with%20spaces, където %20 е празното място между знаците (стойности 2016 и 3210).
  • В XML и XHTML знаците могат да бъдат изразени с аритметични код като „&#xcode“, където „code“ e 1-6 цифрено шестнайсетично число добавено към символ от [Уникод|Unicode]. Вследствие &#x007А е еквивалент на „z“(Unicode стойност 007А, десетична 122)
  • Цветовата гама в HTML, CSS и X Windows могат да бъдат изразени с шест цифрен шестнайсетичен код (по две за червено, зелено и синьо, подредени в този ред) предхождан с #: бялото се възпроизвежда с #FFFFFF. В [CSS] това може да се представи и с 3 знака #FFF(бяло)
  • В програмни езици като C++, C#, Java, JavaScript, Python и Windows PowerShell се пише 0x пред шестнайсетичното число:0xA12. Символи или символни низове могат да се представят с \x последвани от два шестнайсетични символа:\x1B.а
  • Други езици като Pascal, Delphi, някои версии на BASIC ( Commodore ), GML и Forth използвате $ като префикс: $ 5A3.ac
  • В Unicode стандарт, символна стойност се представя с U + следвана от шестнайсетичен стойност: U +03B1 - гръцката буква алфа (α).
  • Всички IPv6 адреси могат да бъдат записани като осем групи от по четири шестнайсетични цифри, където всяка група е отделена от двоеточие ( : ).Валиден IPv6 адрес: 2001:0 db8: 85a3: 0000:0000:8 A2E: 0370:7334

Ранните писмени представяния

Изборът на буквите от А - F да заместят цифрите от 10-15 не е универсален в ранната история на компютрите.

  • Bendix G-15 компютри са използвали буквите U - Z вместо А - F.
  • The Librascope LGP-30 използва букви F, G, J, K, Q и W.

Ранно използване на шестнайсетична бройна система в компютъра

Двоичната бройна система е много добра за компютрите, но има малък недостатък – броят на цифрите расте неимоверно бързо. Както се оказва, има и друга бройна схема, която също е благоприятна за компютрите: шестнайсетичната. Преди години, когато компютърът е бил все още съвсем ново откритие, хората, които го проектирали осъзнали, че трябва да се създаде стандарт за съхранение на информация. Тъй като компютрите могат да смятат само с двоични числа - букви, текст и други символи трябвало да бъдат съхранени като числа. Но притеснението им не е било само това. Те трябвало да се уверят, че числото, което, представя примерно ‘А’, ще бъде едно и също на всички компютри. За да се улесни това се създала ASCII (от Английски език – American Standard Code for Information Interchange) таблицата. В нея има невидими символи, които изпълняват определи функции, като отместване на указателя (09), звън (07). Могат да се използват различни комбинации на само осем двоични цифри, или битове, за да се представи всеки символ на ASCII графиката. 128 знака можели да изглеждат много, но не след дълго разработчиците забелязали липсата на много от специалните гласни, използвани от латинския език, различни от английския език като например: ä, é, û и Æ. Също липсвали и математически символи (±, µ, °, ¼) и знаци за парични валути, различни от ($) като (£, ¥, ¢). За да се компенсира тази липса, ASCII таблицата била разширена от 128 на 256 символа.

Стойността на 256 може да бъде представена като шестнайсет на втора степен, което ни връща към шестнайсетична бройна система. Оказва се, че всеки символ на ASCII таблицата може да се представи чрез двуцифрено число в шестнайсетична бройна система – от 00 до FF.

Преобразуване

Човек е свикнал да работи в десетична бройна система, но компютрите работят в двоична бройна система (съставена само от 0-ли и 1-ци). Целта на шестнайсетичната бройна система е да помогне на хората, когато работят с големи числа.

Decimal Binary Hex
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

От Двоична в Шестнайсетична

Ако искаме да сметнем числото 01101000101000101111 (2) до число с база (16), първо се разделя двоичното число на групи от по четири:

0110 1000 1010 0010 1111

Гледайки горната таблица заместваме:

0110 = 6

1000 = 8

1010 = A

0010 = 2

1111 = F

Когато се съберат се получава, че 01101000101000101111 (2) = 68A2F(16).

От Шестнайсетична в Двоична

Числото 68A2F(16) в двоична бройна система:

6 = 0110

8 = 1000

А = 1010

2 = 0010

F = 1111

Когато се съберат се получава, че = 68A2F(16) = 01101000101000101111 (2).

От Десетична в Шестнайсетична

Имаме числото 428591. Всяка цифра се разделя на 16 и се взима нейният остатък. Полученото от делението число делим отново на 16, дотогава докато се получи 0 за резултат. Получените от остатъка числа се вземат отзад напред (от последното деление до първото) и се получава числото в шестнайсетична бройна система.

428591
÷
16
=
26786 остатък 15
26786
÷
16
=
1674 остатък 2
1674
÷
16
=
104 остатък 10
104
÷
16
=
6 остатък 8
6
÷
16
=
0 остатък 6

Гледаме остатъка отзад напред и получаваме, че 428591(10) = 68A2F(16).

Това е C# имплементация на горния алгоритъм

static string baseToHex(int dec)
    {
        var sb = new StringBuilder();
        while( dec > 1 )
        {
            var r = dec % 16;
            dec /= 16;
            sb.Insert( 0, ((int)r).ToString( "X" ) );
        }
        return sb.ToString();
    }

От Шестнайсетична в Десетична

Имаме числото 68A2F(16). Взимат се цифрите отзад напред, всяка се умножава с 16[0..n]. Резултатът се събира.

F * 160 = 15 * 1 = 15
2 * 161 = 2 * 16 = 32
A * 162 = 10 * 256 = 2560
8 * 163 = 8 * 4096 = 32768
6 * 164 = 6 * 65536 = 393216

15 + 32 + 2560 + 32768 + 393216 = 428591

И получаваме, че 68A2F(16) = 428591(10).

Това е C# имплементация на горния алгоритъм

static int hexToBase(string hex)
    {
        hex = hex.ToLower();
        int dec = 0;
        for(int i = hex.Length -1, power = 0; i >=0; i--, power++)
        {
            char c = hex[i];
            if (c >= 'a' && c <= 'z')
            {
                int temp = 0;
                switch (c)
                {
                    case 'a': temp = 10; break;
                    case 'b': temp = 11; break;
                    case 'c': temp = 12; break;
                    case 'd': temp = 13; break;
                    case 'e': temp = 14; break;
                    case 'f': temp = 15; break;
                }
                dec += temp * (int)Math.Pow(16, power);
            }
            else
            {
                dec += Convert.ToInt32(c.ToString()) * (int)Math.Pow(16, power);
            }
        }
        return dec;
    }

Инструменти за превръщане на бройни системи

Съвременните операционни системи с графичен интерфейс предлагат калкулатори, способни да преминават през различни бройни системи.

Във Microsoft Windows, на калкулаторът може да бъде зададен научен стил/програмистки стил, който предлага преобразуване от двоична, осмична, десетична и шестнайсетична бройни системи. За шестнайсетична бройна система има специални бутони от A до F, които стават активни, когато се избере бройната система(Hex). Но в шестнайсетичен стил калкулаторът може да смята само цели числа.

В Ubuntu, калкулаторът има научен изглед, който също поддържа пресмятането от различни бройни системи, което включва шестнайсетична. Също както във Microsoft Windows, има специални бутони от A до F.

В Mac OS X вграденият калкулатор не поддържа пресмятането на различни бройни системи.

Други варианти:

Може да се използва директно в търсачката като синтаксисът е следният:

При двоична -> 0b111

Като 0b винаги стои пред числото, за което се търси.

При шестнайсетична -> 0x23A1F

Като 0x винаги стои пред числото, за което се търси.

При осмична -> 0o40

Като 0o винаги стои пред числото, за което се търси.

Съответно в зависимост от бройната система, в която искате да преобразувате систаксиса е : in decimal, in hex, in binary, in octal

Примери: 0b111 in decimal; 0x23A1F in decimal; 32 in binary; 32 in hex; 32 in octal; 0o40 in hex

Степени

Най-широко използваната степен, тази на двойката, е лесна за представянето на числа в шестнайсетична бройна система. Примери за степени на двойката са показани по-долу:

2x стойност
20 1
21 2
22 4
23 8
24 10hex
25 20hex
26 40hex
27 80hex
28 100hex
29 200hex
2A(210dec) 400hex
2B(211dec) 800hex
2C(212dec) 1000hex
2D(213dec) 2000hex
2E(214dec) 4000hex
2F(215dec) 8000hex

Дори по-лесна за използване е степента на четворката, защото квадратът на четири прави шестнайсет – основата на шестнайсетичната бройна система. Примери за степени на четворката са показани по-долу:

4x стойност
40 1
41 4
42 10hex
43 40hex
44 100hex
45 400hex
46 1000hex
47 4000hex
48 10000hex

Култура

Етимология

Думата хексадесимал е съставена от хекса- (от Гръцки език – „шест”) и –десимал (от Латински език – „десет”). За първи път думата хексадесимал, заместваща ранната латинска интерпретация - сексадесимал, се появява през 1954 година. Думата шестдесетичен (за шестдесетична бройна система) запазва латинското си название „сексагесимал”. Доналд Кнут е посочил, че правилният термин е „сенидъри”(от Английски – „senidery”) за латинското наименувание – „групирани по 16”. Алфред Б. Тейлър е използвал „сенидъри” в средата на 18 век в неговата документация за алтернативни бройни системи, въпреки че той отхвърля използването на шестнайсетична бройна система заради „неудобния брой цифри”. Шварцман отбелязва, че шестнайсетичната бройна система трябва да носи наименуванието си от Латински, а именно – „сексадесимал”. Но неговите опасения са, че компютърните хакери биха съкратили думата просто на „секс”. Етимологическото правилно гръцко понятие би било „хексадъкейдик” (въпреки че в съвременния гръцки език е по-разпространено „дека-хексадик”).

Използване в китайската култура

Традиционните китайски единици за тегло са в шестнайсетична бройна система. Например, един джин в старата система се равнява на шестнайсет таела. Китайското сметало може да се използва за извършване на шестнайсетични изчисления.

Основни абревиатури

Цяло наименование на бройна система Абревиатура Основа
Двоична (Шаблон:Lang-en) bin 2
Осмична (Шаблон:Lang-en) oct 8
Десетична (Шаблон:Lang-en) dec 10
Шестнайсетична (Шаблон:Lang-en) hex 16

Източници