"Няма нищо по-добро от ефективно 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 ще го третира като осмично.
Примери:
Код | Бележки |
---|---|
|
х е 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 пред всяко число."
"Но ако възнамерявам да е осмичен, тогава мога?"
„Да.
Двоично 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“ ' идва от думата двоичен).
Примери:
Код | Бележки |
---|---|
|
х е 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иране. |
Шестнадесетично 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 степенуване.“
GO TO FULL VERSION