Տասական համակագի թվերի փոխարկումը երկուական համակարգի թվերի
Տասական թվերը (այն թվերը, որոնք մենք օգտագործում ենք ամեն օր) երկուական համակարգի թվերի (որոնք հիմնված են 2-ի աստիճանների վրա) փոխարկելը համակարգչային գիտության հիմնական հմտություններից է։ Երկուական համակարգում ամեն թվանշան ներկայացնում է 2-ի որոշակի աստիճան։ Կարող եք երկուական թիվը դիտարկել որպես ցուցում այն մասին, թե որ 2-ի աստիճաններն են անհրաժեշտ, որպեսզի դրանց գումարը հավասար լինի տրված թվին։
Թիվ տասական համակարգում
128
64
32
16
8
4
2
1
Գումար
114
0
1
1
1
0
0
1
0
114 = 64 + 32 + 16 + 2
12
0
0
0
0
1
1
0
0
12 = 8 + 4
13
0
0
0
0
1
1
0
1
13 = 8 + 4 + 1
Երկուական ներկայացման յուրաքանչյուր 1 նշում է, որ համապատասխան 2-ի աստիճանը ներառված է գումարի մեջ, իսկ 0-ները ցույց են տալիս, որ տվյալ աստիճանն այդ գումարի մեջ չի մտնում։ Երկուական համակարգի առանձնահատկությունը կայանում է նրա պարզության և միարժեք ներկայացման մեջ։
💡
Յուրաքանչյուր թիվ ունի միայն մեկ երկուական համակարգի ներկայացում, որը կազմված է տարբեր 2-ի աստիճանների գումարումից:
Ամենաաջ բիթի հետ աշխատանք
Սկսելու համար, դիտարկենք, թե ինչպես կարելի է գտնել թվի երկուական ներկայացման ամենաաջ կողմում գտնվող բիթը։ Տասական համակարգում, եթե ցանկանում ենք գտնել թվի վերջին թվանշանը, պարզապես վերցնում ենք 10-ի բաժանելիս (% 10) ստացվող մնացորդը։ Նույն գաղափարն աշխատում է նաև երկուական համակարգում․ աջ բիթը գտնելու համար պետք է վերցնել տվյալ թվը 2-ի բաժանելիս ստացվող մնացորդը (% 2)։ Այստեղից հետևում է, որ յուրաքանչյուր զույգ թիվ երկուական համակարգում ավարտվում է 0-ով, իսկ ցանկացած կենտ թիվ՝ 1-ով։
Օրինակ․
114-ի աջ բիթը 0 է, քանի որ 114 % 2 = 0:
13-ի աջ բիտը 1 է, քանի որ 13 % 2 = 1:
Երկուական թվի տեղաշարժը (shift)
Փորձենք հասկանալ, թե ինչպես է կարելի տեղաշարժել թվի ամբողջ երկուական ներկայացումը։ Այդ քայլը համարժեք է տասական համակարգում թիվը 2-ի բաժանելուն (/ 2 կամ // 2 Python-ում)։ Այս գործողությունը «հեռացնում» է ամենաաջ բիթը, և հաջորդ բիթը դառնում է նոր աջ բիթ։
114 (որի երկուական տեսքն է ) մեկ անգամ աջ տեղաշարժելու արդյունքում ստանում ենք , ինչը տասականում հավասար է 114 / 2 = 57:
13 (որի երկուական տեսքն է ) մեկ դիրքով աջ տեղաշարժելու արդյունքում ստանում ենք , ինչը տասականում հավասար է 13 / 2 = 6:
Փոխարկման ալգորիթմը
Ունենալով ամենաաջ բիթի հետ աշխատելու այս երկու հնարավորությունը, կարելի է կազմել պարզ ալգորիթմ, որը տասական թիվը երկուական համակարգի թվի կվերածի։ Ալգորիթմը կաշխատի այսպես.
Ստեղծել դատարկ տող, որտեղ պահվելու է երկուական ներկայացումը։
Քանի դեռ թիվը մեծ է 0-ից․
Վերցնենք ամենաաջ բիթը (2-ի վրա բաժանելիս մնացորդը վերցնելով)
Ավելացնենք այդ բիթը մեր բինար տողին
Բաժանենք թիվը 2-ի, որպեսզի այն երկուական համակարգում աջ տեղաշարժենք
Վերադարձնել ստացված տողը, եթե այն դատարկ չէ, հակառակ դեպքում՝ 0։
Այս ալգորիթմով ցանկացած տասական համակարգի թիվ կարելի է փոխարկել երկուական թվի։
Կարճ իրականացում
b, d = '101001101', 0 # երկուական և տասնորդական թվերը
power = 1 # Ներկա 2-ի աստիճանը (1, 2, 4, 8, 16, ...)
for bi in b[::-1]: # Ամենափոքր բիտից մինչև ամենամեծը
d += int(bi) * power
power *= 2
print(d)
binary → decimal conversion
b, d = '', 5234 # երկուական և տասնորդական թվերը
while d > 0: # Քանի դեռ կա մշակման ենթակա բիթ
b = str(d % 2) + b # Ամենաաջ բիթը դնում ենք տողի ձախ մասում
d //= 2 # Թիվը տեղաշարժում ենք աջ (ջնջում աջ բիթը)
print(b if b != '' else 0)