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, като осмична стойност.

Примери:

Код Бележки
int x = 015;
х е 13: 1*8+5
int x = 025;
х е 21: 2*8+5
int x = 0123;
x е 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Това няма да се комп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) .

Примери:

Код Бележки
int x = 0b100; 
х е 4: 1*4+0*2+0
int x = 0b1111;
х е 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х е 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;
int x = 0b12000;
Това няма да се комп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 степенуване."