1. Осмично codeиране
Говорейки за codeировки... Както знаете, в ежедневието ние използваме десетична система : всички наши числа са представени с помощта на 10 символа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Има 10 цифри, така че системата се нарича десетична.
Но програмистите са големи изобретатели. Те веднага излязоха с codeировки, които използват различен брой символи. Например 16, 8 и 2.
Алтернативното codeиране, което използва 8 символа, е най-лесното: просто изхвърлете 8 и 9 и ще получите осмично codeиране (осмичната бройна система ).
И, да, можете да използвате осмичната система, за да посочите числови литерали. Ако, разбира се, наистина имате нужда. По-лесно е, отколкото звучи. Просто трябва да напишете числото 0 преди числото.
С други думи, Java третира всеки цял литерал, започващ с 0, като осмична стойност.
Примери:
Код | Бележки |
---|---|
|
х е 13: 1*8+5 |
|
х е 21: 2*8+5 |
|
x е 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
Това няма да се компorра: 8 не е един от символите, използвани в осмичното codeиране. |
Малко вероятно е да се наложи да пишете осмични числа в codeа си, но трябва да знаете Howви са те. В крайна сметка ще трябва да прочетете code, написан от други. И Howто споменахме по-горе, програмистите са големи изобретатели.
Е, не забравяйте, че не можете просто да напишете 0 пред всяко число.
2. Двоично codeиране
Двоичното codeиране е още по-интересно. Ако осмичното има само цифрите 0-7, тогава двоичното има само 0 и 1. Защо е необходимо това codeиране?
Това има всичко общо с вътрешната структура на компютъра. Всичко в компютъра работи на електричество и Howто се случва, най-ефективният начин да съхранявате и предавате нещо с помощта на електричество е да използвате две състояния: or няма електричество в проводника (нула) и има електричество (едно).
Това е произходът на популярността на двоичната бройна система.
По принцип не се използва много често в Java: Java се счита за език от високо ниво, напълно абстрахиран от хардуера, на който работи. Наистина, интересува ли ви Howъв формат се използва за съхраняване и обработка на данни в компютъра?
Но през последните десетилетия програмистите обикнаха двоичното codeиране (и други codeировки, базирани на него). В резултат на това Java има оператори, които приемат двоични числа като входни данни. А точността на числата с плаваща запетая зависи от тяхното двоично представяне.
По принцип е по-добре да знаете за това codeиране, отколкото да не знаете.
И Howто в случая с осмичното codeиране, Java има начин да codeира литерали с помощта на двоичната система. Това означава, че литералите се състоят само от 0 и 1. За да може компилаторът на Java да разбере, че codeът съдържа числов литерал, codeиран двоично, а не просто десетично число, състоящо се от нули и единици, всички двоични литерали се идентифицират с помощта на префикса 0b ('b' идва от думата binary) .
Примери:
Код | Бележки |
---|---|
|
х е 4: 1*4+0*2+0 |
|
х е 15: 1*8+1*4+1*2+1 |
|
х е 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 + 0*2 3 +1*2 2 +1*2+1; |
|
Това няма да се компorра: 2 не е един от символите, използвани в двоичното codeиране. |
3. Шестнадесетично codeиране
В допълнение към осмичното и двоичното codeиране, литералите могат да бъдат записани и в шестнадесетичен формат. Това е много популярно codeиране.
Това е така, защото въпреки че двоичната нотация е възможно най-близка до това How действително се съхраняват числата, за хората е твърде трудно да работят ефективно с такива числа: в двоична система числото един мorон съдържа 20 цифри, а не 7.
Ето защо програмистите измислиха шестнадесетичната система. В крайна сметка 16 е 2, повишено на 4-та степен, така че точно 4 бита съответстват на една шестнадесетична цифра. Грубо казано, всеки 4 бита вече могат да бъдат записани като една шестнадесетична цифра.
Шестнадесетичното codeиране също има свой собствен уникален префикс: 0x . Примери:
Десетично число | Двоичен запис | Шестнадесетичен запис |
---|---|---|
17 | 0b 0001 0001 | 0x 1 1 |
4 1 | 0b 0010 1 00 1 | 0x 2 9 |
85 | 0b 0101 0101 | 0x 5 5 |
256 | 0b 1 0000 0000 | 0x 1 0 0 |
Добре, казвате вие, достатъчно ясно е How получихме осмичната система: просто изхвърлихме числата 8 и 9, но откъде да вземем 6-те допълнителни символа за шестнадесетичната система? Бих искал да ги видя!
Всичко е просто. Първите 6 букви от английската азбука бяха взети като 6 липсващи символа: A (10), B (11), C (12), D (13), E (14), F (15).
Примери:
Шестнадесетичен запис | Двоичен запис | Десетично число |
---|---|---|
0x 1 | 0b 0000 0001 | 1 |
0x 9 | 0b 0000 1001 | 9 |
0x А | 0b 0000 1010 | 10 |
0x Б | 0b 0000 1011 | 11 |
0x C | 0b 0000 1100 | 12 |
0x D | 0b 0000 1101 | 13 |
0x Е | 0b 0000 1110 | 14 |
0x F | 0b 0000 1111 | 15 |
0x 1 F | 0b 0001 1111 | 31 |
0x A F | 0b 1010 1111 | 175 |
0x F F | 0b 1111 1111 | 255 |
0x F F F | 0b 1111 1111 1111 | 4095 |
4. Как да конвертирате число от шестнадесетично
Преобразуването на число от шестнадесетичен в десетичен е много лесно. Да кажем , че имате числото 0 x A F C F. Колко е това в десетичен знак?
Първо, имаме позиционна бройна система, което означава, че приносът на всяка цифра към общото число се увеличава с коефициент 16, докато се движим отдясно наляво:
A * 16 3 + F * 16 2 + C * 16 1 + F
Символът A съответства на числото 10, буквата C съответства на числото 12, а буквата F представлява петнадесет. Получаваме:
10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15
Повишавайки 16 до различните степени, които съответстват на цифрите, получаваме:
10 * 4096 + 15 * 256 + 12 * 16 + 15
Обобщаваме всичко и получаваме:
45007
Знаете How този номер се съхранява в паметта:
0x A F C F
Но сега нека го преобразуваме в двоичен code. В двоичен вид би било:
0b 1010 1111 1100 1111
Всеки набор от четири бита отговаря точно на един шестнадесетичен знак. Това е супер удобно. Без ниHowво умножение or степенуване."