"Няма нищо по-добро от ефективно codeиране, Амиго! Довери се на стар робот."

— За шифри, използвани от шпиони ли говорите?

„Разбира се, че не. Говоря за представяне на информация в лесно смилаема форма. За цифрови системи. Знаете, че в ежедневието повечето хора използват десетичната система. Тя използва 10 символа за представяне на всяко число: 0, 1, 2 , 3, 4, 5, 6, 7, 8, 9. Има 10 числа, така че системата се нарича десетична."

„Това беше удобно за хората с техните десет пръста. Но програмистите са големи изобретатели. Те веднага излязоха с codeировки, които използват различен брой цифри. Например 2, 8, 16 or 64 цифри. Те направиха това, за направи го удобен за компютри, които разчитат на „има сигнал/няма сигнал“.

„А, виждам Howво е общото между тях... Всички тези системи са базирани на степени на две.

Осмично codeиране

„Добро наблюдение. Нека започнем с codeиране, което включва 8 цифри. Хората може да намерят това за най-лесно: просто изпуснете числата 8 и 9 и – бум – имате осмичното codeиране (бройна система). Наскоро ви казаха за литералите , нали ?"

"Да аз бях."

„Е, изненада! Можете да зададете числови литерали, codeирани с помощта на осмичната система. Ако, разбира се, наистина трябва. По-лесно е, отколкото звучи. Просто поставете 0 пред цялото число.

„Така че , ако числовият литерал започва с нула, това означава ли, че е осмичен ?“

„Да, Java ще го третира като осмично.

Примери:

Код Бележки
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 пред всяко число."

"Но ако възнамерявам да е осмичен, тогава мога?"

„Да.

Двоично codeиране

"Дори и все още да не го разбирате, двоичното codeиране е вашият роден език. Нека ви го напомня. Ако осмичното codeиране има само цифрите 0-7, тогава двоичното codeиране има само 0 и 1."

„Защо е необходимо това codeиране?“

„Както споменах по-горе, това има всичко общо с вътрешната структура на компютъра. Всичко в компютъра работи на електричество и Howто се случва, най-ефективният начин да съхранявате и предавате нещо с помощта на електричество е да използвате две състояния: or няма електричество в проводника (нула) и има електричество (един)."

„Ето защо е толкова популярен... Хм, изглежда, че наистина започвам да си спомням този език!“

„Всички роботи го разбират перфектно. Въпреки че не се използва много често в Java. Java се счита за език от високо ниво, напълно абстрахиран от хардуера, на който работи. Наистина, интересува ли ви Howъв формат се използва за съхраняване и обработка на данни вътре в компютър?

„Но през последните десетилетия програмистите обикнаха двоичното codeиране (и други codeировки, базирани на него). В резултат на това Java има оператори, които приемат двоични числа като входни данни. А точността на числата с плаваща запетая зависи от тяхната двоична стойност представителство.

„Накратко, по-добре е да знаете за това codeиране, отколкото да не знаете.“

"Точно. И Howто беше в случая с осмичното codeиране, Java има начин да codeира литерали, използвайки двоичната система."

„Значи те ще бъдат съставени само от 0 и 1?“

„Точно така. За да може компилаторът на Java да разбере, че codeът съдържа числов литерал, codeиран в двоична система, а не просто десетично число, състоящо се от нули и единици, обичайно е всички двоични литерали да започват с префикса 0b („b“ ' идва от думата двоичен).

Примери:

Код Бележки
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иране.

Шестнадесетично codeиране

„Колко е две на четвърта степен?“

„Шестнадесет. Ти намери правилния въпрос, който да зададеш на робот, който е стигнал толкова далеч, колкото мен!“

„Струва ви се, че сте стигнали далеч. Както и да е, шестнадесет. В допълнение към осмичното и двоичното codeиране, литералите могат да бъдат записани и в шестнадесетичен формат. Това е много популярно codeиране.

„Това е така, защото въпреки че двоичната нотация е възможно най-близка до това How действително се съхраняват числата, за хората е твърде трудно да работят ефективно с такива числа: в двоична система числото един мorон е 20 цифри, а не 7.

„Ето защо програмистите измислиха шестнадесетичната система. В крайна сметка, Howто правилно отбелязахте, 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 b 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

„Как се преобразува шестнадесетично число в десетично?“

„Много е просто. Да кажем, че имате числото 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 45007 се съхранява в паметта.“

„Да, правя. Това е 0x A F C F

„Сега нека го преобразуваме в двоичен code. В двоичен формат ще бъде:

0b 1010 1111 1100 1111

„Всеки набор от четири бита съответства точно на един шестнадесетичен знак. Това е супер удобно. Без ниHowво умножение or степенуване.“