Տասական համակագի թվերի փոխարկումը երկուական համակարգի թվերի

Տասական թվերը (այն թվերը, որոնք մենք օգտագործում ենք ամեն օր) երկուական համակարգի թվերի (որոնք հիմնված են 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:

Փոխարկման ալգորիթմը

Ունենալով ամենաաջ բիթի հետ աշխատելու այս երկու հնարավորությունը, կարելի է կազմել պարզ ալգորիթմ, որը տասական թիվը երկուական համակարգի թվի կվերածի։ Ալգորիթմը կաշխատի այսպես.
  1. Ստեղծել դատարկ տող, որտեղ պահվելու է երկուական ներկայացումը։
  1. Քանի դեռ թիվը մեծ է 0-ից․
      • Վերցնենք ամենաաջ բիթը (2-ի վրա բաժանելիս մնացորդը վերցնելով)
      • Ավելացնենք այդ բիթը մեր բինար տողին
      • Բաժանենք թիվը 2-ի, որպեսզի այն երկուական համակարգում աջ տեղաշարժենք
  1. Վերադարձնել ստացված տողը, եթե այն դատարկ չէ, հակառակ դեպքում՝ 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)
decimal → binary conversion
 
To check your solution you need to sign in
Sign in to continue