Python bitwise အော်ပရေတာများ (ယုတ္တိတန်သောထုတ်ကုန်၊ ယုတ္တိနည်း OR၊ သီးသန့် OR၊ ပြောင်းပြန်လှန်ခြင်း၊ ပြောင်းခြင်း)

စီးပွားရေးလုပ်ငန်း

Python သည် ယုတ္တိဆက်စပ်ပေါင်းစပ်မှု၊ ယုတ္တိကွဲလွဲမှု၊ သီးသန့်ကွဲလွဲမှု၊ ဘစ်သမတ်ပြောင်းပြန်လှန်မှု၊ ဘယ်ဘစ်ဆိုင်းနှင့် ညာဘက်ဘစ်ပြောင်းရွေ့မှုတို့ကို လုပ်ဆောင်ပေးသည့် binary integer အမျိုးအစား int တန်ဖိုးတစ်ခုစီတွင် အသီးသီးရှိနေသည်။

  • &
  • |
  • ^
  • ~
  • <<
  • >>

ဤကဏ္ဍတွင် အောက်ပါတို့ကို ဦးစွာရှင်းပြပါမည်။

  • လမ်းဆုံ(AND) :&
  • ကွဲလွဲမှု(OR) :|
  • EXCLUSIVE-OR လည်ပတ်မှု(XOR) :^

ဆက်လက်၍ အောက်ပါတို့ကို ဆွေးနွေးပါမည်။

  • အနုတ်ကိန်းပြည့်များအပေါ် နှိမ့်ချလုပ်ဆောင်မှုများ
  • နည်းနည်းလှန်( NOT) :~
  • နည်းနည်းပြောင်းတယ်။:<<>>

binary၊ octal နှင့် hexadecimal တွင် ကိန်းပြည့်များကို မည်သို့ရေးရမည်နည်း၊ နှင့် binary၊ octal၊ နှင့် hexadecimal နံပါတ်များနှင့် strings များကို အောက်ပါလုပ်ဆောင်ချက်များကို အသုံးပြု၍ အောက်ပါဆောင်းပါးတွင် ကြည့်ပါ။

  • bin()
  • oct()
  • hex()
  • format()

ထို့အပြင်၊ bitwise လုပ်ဆောင်ချက်များအစား boolean တန်ဖိုးများ (မှန်၊ မမှန်) တွင် ယုတ္တိရှိသောလုပ်ဆောင်မှုများ (Boolean operations) အတွက်၊ အောက်ပါဆောင်းပါးကို ကိုးကားပါ။ နှင့်၊ သို့မဟုတ် &,| အစား သုံးပါ။

လမ်းဆုံ(AND) :&အော်ပရေတာ

ဤသည်မှာ & ကို အသုံးပြု၍ ယုတ္တိ AND ၏ ဥပမာတစ်ခုဖြစ်သည်။ အော်ပရေတာသည် bin() ဖြင့် ဒွိအမှတ်အသားရှိ စာကြောင်းတစ်ခုသို့ ရလဒ်အဖြစ်သို့ ပြောင်းသည်။

x = 9   # 0b1001
y = 10  # 0b1010

print(x & y)
print(bin(x & y))
# 8
# 0b1000

ကွဲလွဲမှု(OR) :|အော်ပရေတာ

| ကို အသုံးပြု၍ ယုတ္တိတန်သော ထုတ်ကုန်တစ်ခု (OR) ဥပမာ bin() ဖြင့် bin() ဖြင့် output ဖြင့် binary notation တွင် string တစ်ခုသို့ ရလဒ်အဖြစ် ပြောင်းလဲသွားသော operator

print(x | y)
print(bin(x | y))
# 11
# 0b1011

EXCLUSIVE-OR လည်ပတ်မှု(XOR) :^အော်ပရေတာ

^ အော်ပရေတာကို အသုံးပြု၍ ယုတ္တိဗေဒထုတ်ကုန် (XOR) ၏နမူနာသည် bin() ကိုအသုံးပြု၍ ဒွိအမှတ်အသားတစ်ခုသို့ ပြောင်းခြင်း၏ရလဒ်နှင့် ပေါင်းစပ်ထားသည်။

print(x ^ y)
print(bin(x ^ y))
# 3
# 0b11

လော့ဂျစ်ဘစ်တစ်ခုစီအတွက် AND၊ OR၊ နှင့် XOR တို့၏ input နှင့် output အကြား ဆက်စပ်မှုကို အောက်ပါဇယားတွင် ပြထားသည်။

ထည့်သွင်းခြင်း ၁ထည့်သွင်းခြင်း ၂လမ်းဆုံ(AND)ကွဲလွဲမှု(OR)EXCLUSIVE-OR လည်ပတ်မှု(XOR)
11110
10011
01011
00000

အနုတ်ကိန်းပြည့်များအပေါ် နှိမ့်ချလုပ်ဆောင်မှုများ

အနုတ်ကိန်းပြည့်တစ်ခုတွင် တစ်နည်းနည်းဖြင့် လုပ်ဆောင်ချက်ကို လုပ်ဆောင်သောအခါ၊ တန်ဖိုးကို နှစ်ခု၏ ဖြည့်စွက်ပုံစံတွင် ဖော်ပြထားသည့်အတိုင်း လုပ်ဆောင်သည်။

သို့သော်၊ သင်သည် အနုတ်ကိန်းပြည့်တစ်ခုကို bin() သို့မဟုတ် ဖော်မတ်()ကို အသုံးပြု၍ ဒွိစာကြောင်းတစ်ခုသို့ ပြောင်းပါက၊ အကြွင်းမဲ့တန်ဖိုးသည် နှစ်ခု၏ ဖြည့်စွက်ဖော်မတ်အစား အနုတ်လက္ခဏာတစ်ခု ရှိနေမည်ကို သတိပြုပါ။

နှစ်ခု၏ ဖြည့်စွက်ဖော်ပြချက်ပါသော စာကြောင်းတစ်ခုကို ရယူလိုပါက၊ အောက်တွင် ပြထားသည့်အတိုင်း လိုအပ်သည့် အများဆုံးဘစ်ဂဏန်းများ၏ အများဆုံးနံပါတ်ဖြင့် AND ကိုယူပါ။

  • 4-bit အတွက်0b1111(=0xf)
  • 8-bit အတွက်0xff
  • 16-bit အတွက်0xffff

နှစ်ခု၏ ပေါင်းစပ်ကိုယ်စားပြုမှု စာကြောင်းတစ်ကြောင်းကို သင်ရနိုင်သည် (တစ်ကွက်ချင်းစီကို ပြောင်းပြန်ဖြစ်ပြီး 1 ကို ပေါင်းထည့်သည်)။

x = -9

print(x)
print(bin(x))
# -9
# -0b1001

print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

နည်းနည်းလှန်:~အော်ပရေတာ

~ အော်ပရေတာများနှင့် အနည်းငယ်လှန်ခြင်း ဥပမာ။

Bitwise ပြောင်းပြန်လှန်ခြင်းသည် ဘစ်တစ်ခုစီ၏တန်ဖိုးကို ရိုးရှင်းစွာပြောင်းပြန်ခြင်းမဟုတ်ပါ။ ဤအော်ပရေတာကိုအသုံးပြုသောအခါ ပြန်တန်ဖိုးသည် အောက်ပါအတိုင်းဖြစ်သည်။
~x#ERROR!-(x+1)

-(x+1)ဤတန်ဖိုးသည် input value x ကို နှစ်ခု၏ ဖြည့်စွက်ပုံစံအဖြစ် ထည့်သွင်းကာ bits အားလုံးကို ပြောင်းပြန်လှန်ခြင်းနှင့် ညီမျှသည်။

အထက်ဖော်ပြပါအတိုင်း၊ Python တွင်၊ အနုတ်ကိန်းဂဏန်းကို bin(), format() စသည်တို့ကို အသုံးပြု၍ ဒွိစာကြောင်းအဖြစ်သို့ ပြောင်းသောအခါ၊ ၎င်းသည် နှစ်ခု၏အဖြည့်ပုံစံမဟုတ်သော်လည်း အနုတ်လက္ခဏာဖြင့် ပကတိတန်ဖိုးဖြစ်သည်။ ထို့ကြောင့်၊ ~x ကို စာကြောင်းတစ်ခုသို့ တိုက်ရိုက်ပြောင်းခြင်းသည် မူရင်းတန်ဖိုး၏ bits နှင့် ပြောင်းပြန်လှန်ထားသော စာကြောင်းကို ဖြစ်ပေါ်စေမည်မဟုတ်ပါ။

x = 9  # 0b1001

print(~x)
print(bin(~x))
# -10
# -0b1010

ကျွန်ုပ်တို့သည် AND လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပြီး ၎င်းကို နှစ်ခု၏ ပေါင်းစပ်ကိုယ်စားပြုမှု၏ string တစ်ခုအဖြစ်သို့ ပြောင်းလဲသောအခါ၊ မူရင်းတန်ဖိုး၏ bits များသည် ပြောင်းပြန်ဖြစ်ကြောင်း ကျွန်ုပ်တို့တွေ့မြင်နိုင်သည်။

ထို့အပြင်၊ ဥပမာအားဖြင့်၊ ဂဏန်း ၄ လုံးပါသော ဘစ်စာကြောင်းအဖြစ် ပြောင်းပြန်ထားသော ဘစ်စာကြောင်းကို ရယူရန်၊ အောက်ပါအတိုင်း ANDed တန်ဖိုးအတွက် သုညများကို ဖြည့်ရန် ဖော်မတ်() ကို အသုံးပြုပါ။04b'

print(bin(~x & 0xff))
print(format(~x & 0b1111, '04b'))
# 0b11110110
# 0110

နည်းနည်းပြောင်းတယ်။:<<၊>>

ဘစ်ဆိုင်းအော်ပရေတာများကို အသုံးပြုသည့် ဘယ်ဘစ်ဆိုင်းနှင့် ညာဘစ်ဆိုင်း၏ နမူနာများ။

x = 9  # 0b1001

print(x << 1)
print(bin(x << 1))
# 18
# 0b10010

print(x >> 1)
print(bin(x >> 1))
# 4
# 0b100

အနုတ်တန်ဖိုးများအတွက်၊ နိမိတ်လက္ခဏာဘစ်ကို တိုးချဲ့ပြီး ရွှေ့ကာ အပြုသဘော/အနုတ်လက္ခဏာသည် တူညီနေပါသည်။ အနှုတ်တန်ဖိုးသည် ဘယ်ဘက်တွင် 1s မျဉ်းတစ်ကြောင်း၏ ပုံဖြစ်သည်။

x = -9
print(bin(x))
print(bin(x & 0xff))
# -0b1001
# 0b11110111

print(x << 1)
print(bin(x << 1))
print(bin((x << 1) & 0xff))
# -18
# -0b10010
# 0b11101110

print(x >> 1)
print(bin(x >> 1))
print(bin((x >> 1) & 0xff))
# -5
# -0b101
# 0b11111011

ကိန်းဂဏာန်းများကို ရှင်းရှင်းလင်းလင်း မတွေးတတ်သောကြောင့် နှစ်ခု၏ ပေါင်းစပ်အသုံးအနှုန်းများ၏ ကြိုးတန်းများကို တွေးကြည့်လျှင် ပိုကောင်းသည်။