Հաշվարկման երկուական համակարգն ինֆորմատիկայում: Ինչպե՞ս արագ և հեշտ տասական հաշվարկման համակարգով ներկայացված թիվը վերածել երկուական համակարգով ներկայացված թվի: JavaScript-ում ինչպե՞ս ներկայացնել երկուական հաշվարկման համակարգի թվերը: Կատարենք մի հաշվարկման համակարգից անցում մյուսին՝ օգտվելով JavaScript-ում ներդրված toString մեթոդից:
Նախ բերեք հասկանանք թե մաթեմատիկայում ինչ է իրենից ներկայացնում հաշվարկման համակարգը։ Հաշվարկման համակարգ անվանում են թվերի գրության և ներկայացման կանոնների համախումբը։ Նշանները, որոնք օգտագործվում են հաշվարկման համակարգում անվանում են թվանշաններ, իսկ հաշվարկման համակարգը կարելի է ներկայացնել երկու ձևով՝ ոչ դիրքային և դիրքային։
Ե՛վ տասական, և՛ երկուական համակարգերն իրենցից ներկայացնում են դիրքային համակարգեր, դա նշանակում է, որ թվերի գրության մեջ օգտագործվող թվանշանի արժեքը կախված է ոչ միայն նրա մեծությունից, այլ նաև նրա դիրքից՝ օրինակ թեև 888 թվի մեջ օգտագործվում է նույն թվանշանը (8), սակայն նրա արժեքը կախված դիրքից տարբերվում է՝ աջ կողմում գտնվող ութ թվանշանը ընդունվում է որպես ութ միավոր, մեջտեղի դիրքում գտնվող 8 թվանշանը նշանակում է ութ տասնյակ, իսկ ձախ դիրքում գտնվողը՝ ութ հարուրյակ։
Երբ հին ժամանակներում մարդիկ հայտնաբերեցին հաշիվը, նրանք ինչպես հիմա երեխաները, հաշվում էին մատների վրա։ Քանի-որ ձեռքի մատները տասն են, հաշվարկների հիմքում դրվեց տասական համակարգը։ Այս հաշվարկային համակարգում կա տաս թվանշան՝ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, և թվի մեծությունն ինչպես նշվեց կախված է ոչ միայն թվանշանի արժեքից, այլ նաև նրա դիրքից։ Տասական հաշվարկային համակարգում առանձնահատուկ դեր ունի 10 թիվը և նրա աստիճանները՝ 100, 1000, 10․000 և այլն։ Այդ առանձնահատուկ դերը պայմանավորված է նրանով, որ տասը թվի գրության համար նոր թվանշան գոյություն չունի, և մենք ստիպված ենք օգտագործել 0 և 1 թվանշանները, դիրքային փոփոխության շնորհիվ ստանալով արժեքային փոփոխություն։
Սակայն մեր համար շատ հասկանալի և հարազատ տասական համակարգը շատ անհարմար է համակարգիչների համար։ Համակարգչի «ուղեղը» հանդիսացող միկրոպրոցեսսորը (մշակիչ) պարունակում է միլիարդավոր տրանզիստորներ, որտեղ թվերի ներկայացման համար ամենահարմար ձևաչափը երկուական համակարգն է։ Ինչու՞, որովհետև էլէկտրական ազդանշանի բացակայությունը կամ թույլ ազդանշանը կարելի է ընդունել որպես 0, իսկ առկայությունը՝ որպես 1։
Այս երկու թվանշանի՝ 0 և 1 վրա հիմնված հաշվարկման համակարգն էլ հենց անվանում են երկուական (կամ բինար) հաշվարկման համակարգ։ Երկուական համակարգում տասական համակարգի 2 թիվը գրառելու համար հատուկ թվանշան գոյություն չունի և մենք այն գրառում ենք 10, երեքը համապատասխանաբար կլինի 11, չորսը՝ 100, հինգը՝ 101 և այդպես շարունակ։
Ինչպես որ տասական համակարգում առանձնահատուկ դերակատարում ուներ տաս թիվը և նրա աստիճանները, այնպես էլ երկուական համակարգում այդ առանձնահատուկ դերը կատարում է երկուս թիվը և նրա աստիճանները՝ 4, 8, 16, 32, 64, 128, 256 և այլն։
Երկուական համակարգով կարելի է ներկայացնել ինչպես բոլոր թվերը, այնպես էլ կոդավորել և ներկայացնել տեքստեր, նկարներ, վիդեո և աուդիո ձայնագրություններ։
Իսկ հիմա փորձենք տեսնել թե ինչպես կարելի է հեշտ և արագ տասական համակարգի ցանկացած թիվ վերածել երկուական համակարգի։ Որպես օրինակ վերցնենք 115 թիվը։ Ամենակարևորը 2-ի աստիճանների շարքը մտապահելն է։ Եթե դուք այն չգիտեք, ոչ մի դժվարություն չի ներկայացնում շարքի ամեն հաջորդ թիվը ստանալ նախորդ թիվը երկուսով բազմապատկելու միջոցով։ Շարքը գրի ենք առնում հակառակ հերթականությամբ՝ աջից ձախ․
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|
Եթե երկուսի աստիճանը տեղավորվում է թվի մեջ, ապա մենք այդ դիրքում գրում ենք 1, և թվից հանում երկուսի այդ աստիճանը, հակառակ դեպքում այդ դիրքում գրում ենք 0։ Օրինակ 115 թիվը փոքր է 128-ից, այսինքն նա իր մեջ 2-ի 7 աստիճանը հանդիսացող 128 թիվը չի կարող պարունակել, հետևաբար ամենաձախ դիրքում մենք գրում ենք 0։
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 |
Հաջորդը՝ 2-ի 6 աստիճանը հանդիսացող 64 թիվն է։ Այն 115 թվի մեջ պարունակվում է, հետևաբար այդ դիրքում գրում ենք 1, և 115-ից հանելով 64, ստանում ենք 51 և մտապահում այդ թիվը։
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 1 |
Հաջորդ՝ 2-ի 5 աստիճանը հանդիսացող 32 թիվն է, որը մեր մտապահած 51 թվի մեջ պարունակվում է, հետևաբար նաև այս դիրքում ենք մենք գրում 1, և 51-ից հանելով 32, ստանում ենք 19, և մտապահում այն։
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 |
Մյուս քայլին ունենք 2-ի 4 աստիճանը հանդիսացող 16 թիվը, այն 19 թվի մեջ պարունակվում է, այսինքն այս դիրքում ևս անհրաժեշտ է գրառել 1 թվանշանը, ապա 19-ից հանում ենք 16, ստանում 3 և մտապահում այն։
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 |
Հաջորդ քայլին ունենք 2-ի խորանարդ 8 թիվը, որը սակայն մեծ է մեր մտապահած 3 թվից, և հետևաբար այդ դիրքում գրառում ենք 0 թվանշանը՝
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 0 |
Մյուս դիրքում ունենք 2-ի քառակուսի 4 թիվը, որը նույնպես մեծ է մեր մտապահած 3 թվից, այսինքն կրկին այդ դիրքում պետք է գրառենք 0 թվանշանը՝
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 0 | 0 |
Հաջորդ դիրքում ունենք 2-ի մեկ աստիճանը հանդիսացող 2 թիվը, որը մեր մտապահած 3 թվի մեջ պարունակվում է, հետևաբար այդ դիրքում մենք գրառում ենք 1 թվանշանը, ապա 3-ից հանելով 2 թիվը, ստանում ենք 1, և մտապահում այն։
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 0 | 0 | 1 |
Եվ վերջին քայլը՝ 2-ի զրո աստիճանը հանդիսացող 1 թիվը մեր մտապահած 1 թվի մեջ պարունակվում է, այսինքն այդ դիրքում ևս պետք է գրառենք 1 թվանշանը՝
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
Առջևի 0-ն անտեսելով,արդյունքում ստանում ենք 1110011։ Սա էլ հենց 115 թվի ներկայացումն է երկուական համակարգում։
Հակառակ պրոցեսը՝ երկուականից վերածել տասականի, շատ անգամ ավելի հեշտ է: Ընդամենն անհրաժեշտ է իրար գումարել բոլոր այն երկուսի աստիճանները, որոնց դիրքերը նշված են 1-երով։ Օրինակ՝ վերոնշյալ 1110011-ը կլինի՝ 64 + 32 + 16 + 2 + 1 == 115
JavaScript-ում թվերի երկուական ներկայացման համար օգտագործվում է 0b կարճ գրելաձևը։ Օրինակ եթե ուզում ենք հայտարարել փոփոխական և նրան վերագրել երկուական համակարգով ներկայացված թիվ, այն կարող ենք անել այսպես՝
const num = 0b1110011; // 115 թիվը երկուական համակարգում
num․toString(base)
մեթոդը թիվը ներկայացնում է տողային տեսքով, որպես հաշվարկման համակարգ ընդունելով base արգումենտը, որը կարող է լինել 2 ից մինչև 36 (այսինքն առավելագույնը՝ բոլոր թվերի և անգլերենի այբուբենի բոլոր տառերի համախումբը, քանի-որ օրինակ ինֆորմատիկայում չափազանց մեծ տարածում ունեցող տասնվեցական հաշվարկման համակարգում բացի 0-9 թվանշաններից օգտագործվում է նաև անգլերենի այբուբենի A-ից մինչև F տառերը, և օրինակ տասական համակարգի 16219 թիվը տասնվեցական համակարգում գրվում է որպես 3F5B), որպես նախնական արժեք ընդունվում է տասական համակարգը։
Մեզ տվյալ պարագայում հետաքրքրում է երկուական համակարգը, և փորձենք կամայական թիվը տասական հաշվարկման համակարգից վերածել երկուականի․
let a = 115;
console.log(a.toString(2)); // "1110011"
Եթե ուզում ենք առանց փոփոխական հայտարարելու, միանգամից թվի վրա կանչել մեթոդը, ապա կստանանք սինթաքսի սխալ։ Օրինակ եթե կոնսոլում տպենք՝
456․toString(2) // Uncaught SyntaxError
Դրա պատճառն այն է, որ JavaScript-ի սինթաքսը ենթադրում է, որ եթե թվից հետո դրվում է կետ, ապա դրանից հետո պետք է լինի տասնորդական մաս։ Որպեսզի առանց փոփոխական հայտարարելու կարողանանք մեթոդը միանգամից կանչել թվի վրա և միաժամանակ սինթաքսի սխալ չստանանք, ապա անհրաժեշտ է ուղղակի թվից հետո դնել երկու կետ, այդ դեպքում ինտերպրետատորը հասկանում է, որ թվի վրա ուզում ենք մեթոդ կանչել, և ամեն ինչ հրաշալի աշխատում է՝
(456).toString(2); // "111001000"