Կարող եք ձեր կոդը փորձարկել այստեղ
Գործողությունների հատուկ դասը ներկայացված է բիթային գործողություններով: Դրանք կատարվում են int թվերի առանձին թվանշաններով։ Բայց բիթային գործողությունների բնույթը հասկանալու համար դուք պետք է հասկանաք, թե ինչ է սովորաբար ներկայացնում թիվը երկուական ներկայացման մեջ:
Թվերի երկուական ներկայացում
Երկուական համակարգում թվի յուրաքանչյուր նիշ կարող է ունենալ միայն երկու արժեք՝ 0 և 1: Օրինակ, տասնորդական համակարգում 0-ը նույնպես հավասար կլինի 0-ի երկուական համակարգում, իսկ տասնորդական համակարգում 1-ը կհամապատասխանի. 1 երկուական համակարգում: Տասնորդական համակարգում հաջորդ թիվը՝ 2-ը, երկուական համակարգում կհամապատասխանի 10-ի: Այսինքն, երբ 1-ը գումարենք 1-ին, արդյունքը կլինի 10: Եվ այսպես շարունակ:
Օրինակ, 5-ը երկուական ներկայացման մեջ 101 է և ունի երեք նիշ: Երկուական համակարգում տասնորդական թիվը ցուցադրելու համար կարող եք օգտագործել ցուցիչը 0b.
number = 5
print(f"number = {number:0b}") # number = 101
Առանց ցուցիչ նշելու, ֆունկցիան print() ցույց է տալիս թիվը տասնորդական նշումով:
Միևնույն ժամանակ, Python-ը թույլ է տալիս անմիջապես որոշել թիվը երկուական ձևով։ Դա անելու համար թիվը երկուական ձևով նշվում է 0b նախածանցից հետո.
number = 0b101
print(f"number = {number:0b}") # number = 101
print(f"number = {number}") # number = 5
Երկուական և տասնորդական համակարգերի համեմատության ևս մի քանի օրինակ.
number1 = 1 # 0b1
number2 = 2 # 0b10
number3 = 3 # 0b11
number4 = 4 # 0b100
number5 = 5 # 0b101
number6 = 6 # 0b110
Տրամաբանական գործողություններ
Տրամաբանական գործողությունները կատարվում են թվի առանձին թվանշանների վրա։ Python-ն ունի հետևյալ տրամաբանական գործողությունները.
& (տրամաբանական բազմապատկում)
Բազմապատկումը կատարվում է բիթի ուղղությամբ, և եթե երկու օպերանդներն էլ ունեն բիթային արժեքներ, որոնք հավասար են 1-ի, ապա գործողությունը վերադարձնում է 1, հակառակ դեպքում՝ 0 թիվը:
x1 = 2 # 010
y1 = 5 # 101
z1 = x1 & y1
print(f"z1 = {z1}") # z1 = 0
x2 = 4 # 100
y2 = 5 # 101
z2 = x2 & y2
print(f"z2 = {z2}") # z2 = 4
print(f"z2 = {z2:0b}") # z2 = 100
Առաջին դեպքում մենք ունենք երկու թիվ 2 և 5: 2-ը երկուական ձևով ներկայացնում է 010 թիվը, իսկ 5-ը` 101: Եկեք բազմապատկենք թվերը բիտակի (0*1, 1*0, 0*1) և ի վերջո կստանանք 000: Երկրորդ դեպքում 2-ի փոխարեն ունենք 4 թիվը, որն առաջին թվանշանում ունի 1, ինչպես 5 թիվը, այնպես որ վերջում ստանում ենք (1*1, 0*0, 0 *1) = 100, այսինքն՝ 4 թիվը տասնորդական ձևաչափով։
| (տրամաբանական հավելում)
Տրամաբանական բազմապատկման նման, գործողությունը կատարվում է նաև երկուական թվանշանների վրա, բայց այժմ մեկը վերադարձվում է, եթե տրված թվանշանի առնվազն մեկ թիվ ունի մեկ: Օրինակ:
x1 = 2 # 010
y1 = 5 # 101
z1 = x1|y1 # 111
print(f"z1 = {z1}") # z1 = 7
print(f"z1 = {z1:0b}") # z1 = 111
x2 = 4 # 100
y2 = 5 # 101
z2 = x2 | y2 # 101
print(f"z2 = {z2}") # z2 = 5
print(f"z2 = {z2:0b}") # z2 = 101
^ (տրամաբանական բացառիկ ԿԱՄ)
Եթե երկու թվերի ընթացիկ թվանշանի արժեքները տարբեր են, ապա վերադարձվում է 1, հակառակ դեպքում՝ 0: Այս գործողությունը կոչվում է նաև XOR: Օրինակ:
x = 9 # 1001
y = 5 # 0101
z = x ^ y # 1100
print(f"z = {z}") # z = 12
print(f"z = {z:0b}") # z = 1100
Այստեղ 9 թիվը երկուական ձևով 1001 է։ 5 թիվը 0101 է։ XOR գործողությունը տալիս է հետևյալ արդյունքը՝ 1^0, 0^1, 0^0, 1^1։ Այստեղ տեսնում ենք, որ թվերի առաջին երկու թվանշանները տարբեր արժեքներ են պարունակում, ուստի առաջին երկու թվանշանները կստանան 1 արժեքը։ Իսկ թվերի վերջին երկու թվանշանները պարունակում են նույն արժեքները, ուստի վերջին երկու թվանշանները կստանան 0 արժեքը։ Այսպիսով, մենք ստանում ենք 1100 կամ 12 թիվը տասնորդական համակարգում:
Այս գործողությունը հաճախ օգտագործվում է պարզ կոդավորման համար.
x = 45 #101101
key = 102 #1100110
encrypt = x ^ key #1001011 or 75
print(f"{encrypt}")
decrypt = encrypt ^ key #45
print(f"{decrypt}")
Դուք կարող եք նաև օգտագործել այս գործողությունը՝ թվերի արժեքները փոխանակելու համար.
x = 9 # 1001
y = 5 # 0101
x = x ^ y
y = x ^ y
x = x ^ y
print(f"x = {x}") # x = 5
print(f"y = {y}") # y = 9
~ (ինվերսիա)
Շրջում է թիվը. Արտահայտությունն ~x իրականում նման է -(x+1). Օրինակ:
x = 5
y = ~x;
print(f"y: {y}") # -6
Հերթափոխի գործողություններ
Հերթափոխի գործողությունները կատարվում են նաև թվերի թվերի վրա: Տեղաշարժը կարող է տեղի ունենալ աջ և ձախ:
x<<y- x թիվը տեղափոխում է ձախ y թվանշաններով: Օրինակ, 4<<14 թիվը (որը երկուականում 100 է) տեղափոխում է մեկ տեղ դեպի ձախ, արդյունքում տասնորդականում ստացվում է 1000 կամ 8:
x>>y- x թիվը տեղափոխում է աջ y թվանշաններով: Օրինակ, 16>>1 թիվը տեղափոխում է 16 թիվը (որը երկուականում 10000 է) մեկ տեղ դեպի աջ, արդյունքում տասնորդականում ստացվում է 1000 կամ 8:
Այսպիսով, եթե սկզբնական թիվը, որը պետք է տեղափոխվի այս կամ այն կողմ, բաժանվում է երկուսի, ապա իրականում ստացվածը բազմապատկում կամ բաժանում է երկուսի: Հետևաբար, նմանատիպ գործողություն կարող է օգտագործվել ուղիղ երկուով բազմապատկելու կամ բաժանելու փոխարեն: Օրինակ:
a = 16 #10000
b = 2
c = a << b
print(c) #64
d = a >> b
print(d) #4
Ավելին, գործողություններում ներգրավված թվերը պարտադիր չէ, որ բաժանվեն 2-ի.
a = 22 #10110
b = 2
c = a << b
print(c) #88
d = a >> b
print(d) #5
Մեկնաբանություն գրելու համար խնդրում ենք մուտք լինել