ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများနှင့် စာကြောင်းများကို Python တွင် တစ်ခုနှင့်တစ်ခုသို့ ပြောင်းပါ

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

Python သည် ကိန်းဂဏန်းများနှင့် စာကြောင်းများကို binary၊ octal နှင့် hexadecimal နံပါတ်များအပြင် ပုံမှန်ဒဿမဂဏန်းများအဖြစ် ကိုင်တွယ်နိုင်သည်။ ၎င်းတို့ကြားတွင် ပြောင်းရန်မှာလည်း လွယ်ကူသည်။

ဤကဏ္ဍတွင်၊ အောက်ပါအကြောင်းအရာများကို နမူနာကုဒ်ဖြင့် ရှင်းပြပါမည်။

  • ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများဖြင့် ကိန်းပြည့်များကိုရေးပါ။
  • နံပါတ်များကို ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများဖြင့် လိုင်းများအဖြစ် ပြောင်းပါ။
    • built-in လုပ်ဆောင်ချက် (ဥပမာ ပရိုဂရမ်းမင်း ဘာသာစကား)bin()oct()hex()
    • string methodstr.format()Built-in Functions များ၊format(), f ညာဘက်လက်
    • အနုတ်ကိန်းပြည့်တစ်ခုကို နှစ်ခု၏ ဖြည့်စွက်ဖော်မတ်ဖြင့် စာကြောင်းတစ်ခုသို့ ပြောင်းပါ။
  • ဒွိဟိတ်၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများကို ဂဏန်းများအဖြစ် ပြောင်းပါ။
    • built-in လုပ်ဆောင်ချက် (ဥပမာ ပရိုဂရမ်းမင်း ဘာသာစကား)int()
  • လျှောက်လွှာဥပမာများ
    • Binary string ဂဏန်းသင်္ချာ
    • ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများအကြား ပြောင်းပါ။

ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများဖြင့် ကိန်းပြည့်များကိုရေးပါ။

အောက်ပါရှေ့ဆက်များကို ပေါင်းထည့်ခြင်းဖြင့်၊ ကိန်းပြည့် int နံပါတ်များကို ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများ အသီးသီးဖြင့် ရေးသားနိုင်ပါသည်။
စာလုံးကြီးကိုလည်း သုံးနိုင်သည်။

  • Binary နံပါတ်-0bသို့မဟုတ်0B
  • Octal-0oသို့မဟုတ်0O
  • ဆဋ္ဌမကိန်းဂဏန်း-0xသို့မဟုတ်0X

print() ၏ အထွက်သည် ဒဿမသင်္ကေတဖြင့် ဖြစ်လိမ့်မည်။

bin_num = 0b10
oct_num = 0o10
hex_num = 0x10

print(bin_num)
print(oct_num)
print(hex_num)
# 2
# 8
# 16

Bin_num = 0B10
Oct_num = 0O10
Hex_num = 0X10

print(Bin_num)
print(Oct_num)
print(Hex_num)
# 2
# 8
# 16

ရှေ့ဆက်နှင့်ပင်၊ အမျိုးအစားသည် ကိန်းပြည့် int ဖြစ်သည်။

print(type(bin_num))
print(type(oct_num))
print(type(hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>

print(type(Bin_num))
print(type(Oct_num))
print(type(Hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>

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

result = 0b10 * 0o10 + 0x10
print(result)
# 32

Python 3.6 မှစတင်၍ နံပါတ်များ _ တွင် underscore များထည့်နိုင်သည်။ အောက်အမှတ် _ ကို ထပ်ခါထပ်ခါ ပြုလုပ်ခြင်းသည် အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်လာလိမ့်မည်၊ သို့သော် ထပ်မထပ်သရွေ့ သင်နှစ်သက်သလောက် အများအပြားကို ထည့်သွင်းနိုင်ပါသည်။

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

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

နံပါတ်များကို ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများဖြင့် လိုင်းများအဖြစ် ပြောင်းပါ။

နံပါတ်တစ်ခုကို ဒွိ၊ အဋ္ဌမ၊ သို့မဟုတ် ဆဋ္ဌမဂဏန်းအမှတ်အသားဖြင့် string တစ်ခုအဖြစ်သို့ ပြောင်းရန်၊ အောက်ဖော်ပြပါ ပူးတွဲပါလုပ်ဆောင်ချက်များကို အသုံးပြုပါ။

  • built-in လုပ်ဆောင်ချက် (ဥပမာ ပရိုဂရမ်းမင်း ဘာသာစကား)bin()oct()hex()
  • string methodstr.format()Built-in Functions များ၊format(), f ညာဘက်လက်

ဤကဏ္ဍတွင် အနုတ်တန်ဖိုးများအတွက် အနုတ်တန်ဖိုးနှစ်ခု၏ ဖြည့်စွက်ဖော်မတ်တွင် ဖော်ပြထားသော စာကြောင်းတစ်ခုကို မည်သို့ရရှိနိုင်ကြောင်းလည်း ရှင်းပြထားသည်။

Built-in လုပ်ဆောင်ချက်များ bin(), oct(), hex()

အောက်ပါ built-in လုပ်ဆောင်ချက်များသည် နံပါတ်များကို binary၊ octal နှင့် hexadecimal strings အဖြစ်သို့ ပြောင်းလဲနိုင်သည်။

  • Binary နံပါတ်-bin()
  • Octal-oct()
  • ဆဋ္ဌမကိန်းဂဏန်း-hex()

တစ်ခုစီသည် အောက်ပါရှေ့ဆက်များပါသည့် စာကြောင်းတစ်ခုကို ပြန်ပေးသည်။

  • Binary နံပါတ်-0b
  • Octal-0o
  • ဆဋ္ဌမကိန်းဂဏန်း-0x
i = 255

print(bin(i))
print(oct(i))
print(hex(i))
# 0b11111111
# 0o377
# 0xff

print(type(bin(i)))
print(type(oct(i)))
print(type(hex(i)))
# <class 'str'>
# <class 'str'>
# <class 'str'>

ရှေ့စာလုံးကို မလိုအပ်ပါက၊ ၎င်းနောက်ရှိ စာကြောင်းကို ထုတ်ယူရန် slice[2:] ကိုအသုံးပြုပါ သို့မဟုတ် နောက်တွင်ရှင်းပြထားသည့်အတိုင်း format() ကိုသုံးပါ။

print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff

၎င်းကို ဒဿမစာကြောင်းအဖြစ် ပြောင်းလဲလိုပါက၊ သင်သည် str() ကို အသုံးပြုနိုင်သည်။

print(str(i))
# 255

print(type(str(i)))
# <class 'str'>

Built-in function format(), string method str.format(), f string

Built-in function format() နှင့် string method များ str.format() နှင့် f-string တို့သည် နံပါတ်များကို binary၊ octal နှင့် hexadecimal strings အဖြစ်သို့ ပြောင်းလဲနိုင်သည်။

ဖော်မက်()၏ ဒုတိယအငြင်းအခုံ()ကို အောက်ပါအတိုင်း သတ်မှတ်ခြင်းဖြင့်၊ ၎င်းကို ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမတန်းများ အသီးသီးသို့ ပြောင်းလဲနိုင်သည်။

  • Binary နံပါတ်-b
  • Octal-o
  • ဆဋ္ဌမကိန်းဂဏန်း-x
print(format(i, 'b'))
print(format(i, 'o'))
print(format(i, 'x'))
# 11111111
# 377
# ff

print(type(format(i, 'b')))
print(type(format(i, 'o')))
print(type(format(i, 'x')))
# <class 'str'>
# <class 'str'>
# <class 'str'>

ရှေ့ဆက် 0b၊0o,0x ပါသော စာကြောင်းကို ရယူလိုပါက၊ ဖော်မတ်ချခြင်းသတ်မှတ်ချက်စာကြောင်းသို့ # ကို ထည့်ပါ။

print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff

ဂဏန်းအရေအတွက် တစ်ခုခုဖြင့် 0 ကို ဖြည့်သွင်းနိုင်သည်။ ရှေ့ဆက်အတွက် စာလုံးအရေအတွက် (အက္ခရာနှစ်လုံး) ကိုလည်း သုညတွင် ရှေ့စာဖြင့်ဖြည့်သည့်အခါ ထည့်သွင်းတွက်ချက်ရမည်ဖြစ်ကြောင်း သတိပြုပါ။

print(format(i, '08b'))
print(format(i, '08o'))
print(format(i, '08x'))
# 11111111
# 00000377
# 000000ff

print(format(i, '#010b'))
print(format(i, '#010o'))
print(format(i, '#010x'))
# 0b11111111
# 0o00000377
# 0x000000ff

ပြောင်းလဲခြင်းအတွက် string method str.format() ကိုလည်း သုံးနိုင်သည်။

print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff

Python 3.6 မှစတင်၍ f string ကိုသင်အသုံးပြုနိုင်သည်။f'xxx'

print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff

အနုတ်ကိန်းပြည့်တစ်ခုကို နှစ်ခု၏ ဖြည့်စွက်ဖော်မတ်ဖြင့် စာကြောင်းတစ်ခုသို့ ပြောင်းပါ။

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

x = -9

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

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

  • 4bit:0b1111(=0xf)
  • 8bit:0xff
  • 16bit:0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

ဒွိဟိတ်၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများကို ဂဏန်းများအဖြစ် ပြောင်းပါ။

Built-in လုပ်ဆောင်ချက် int()

binary၊ octal သို့မဟုတ် hexadecimal notation တွင် string တစ်ခုကို နံပါတ်တစ်ခုအဖြစ်သို့ ပြောင်းရန် built-in function int() ကိုသုံးပါ။

int(string၊ radix) ဖြင့် binary၊ octal၊ hexadecimal notation စသည်ဖြင့် အချင်းဝက်ကို အခြေခံ၍ ဂဏန်း int အဖြစ်သို့ ပြောင်းနိုင်သည်။ အစွန်းထွက်ကို ချန်လှပ်ထားလျှင် ဂဏန်းကို ဒဿမဟု သတ်မှတ်သည်။

print(int('10'))
print(int('10', 2))
print(int('10', 8))
print(int('10', 16))
# 10
# 2
# 8
# 16

print(type(int('10')))
print(type(int('10', 2)))
print(type(int('10', 8)))
print(type(int('10', 16)))
# <class 'int'>
# <class 'int'>
# <class 'int'>
# <class 'int'>

အစွန်းကွက်ကို 0 ဟုသတ်မှတ်ပါက၊ အောက်ပါစာကြောင်းရှေ့ဆက်အပေါ်အခြေခံ၍ ပြောင်းလဲခြင်းကို လုပ်ဆောင်ပါသည်။

  • Binary ရှေ့ဆက်-0bသို့မဟုတ်0B
  • Octal ရှေ့ဆက်-0oသို့မဟုတ်0O
  • Hexadecimal ရှေ့ဆက်-0xသို့မဟုတ်0X
print(int('0b10', 0))
print(int('0o10', 0))
print(int('0x10', 0))
# 2
# 8
# 16

print(int('0B10', 0))
print(int('0O10', 0))
print(int('0X10', 0))
# 2
# 8
# 16

အခြေခံနံပါတ်သည် 0 ဖြစ်ပြီး နောက်ဆက်တွဲမရှိပါက၊ ၎င်းကို ဒဿမဂဏန်းအဖြစ် ပြောင်းလဲမည်ဖြစ်သော်လည်း အစ (ဘယ်ဘက်ခြမ်း) သည် 0 နှင့် ဖြည့်ပါက အမှားအယွင်းဖြစ်သွားမည်ဖြစ်ကြောင်း သတိပြုပါ။

print(int('10', 0))
# 10

# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'

အခြားကိစ္စများတွင်၊ သုညမပြည့်သောစာကြောင်းများကို ယခင်အတိုင်း ပြောင်းလဲနိုင်သည်။

print(int('010'))
# 10

print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255

သတ်မှတ်ထားသော အစွန်းထွက် သို့မဟုတ် ရှေ့ဆကျဖြင့် စာကြောင်းကို မပြောင်းနိုင်ပါက အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်သည်။

# print(int('ff', 2))
# ValueError: invalid literal for int() with base 2: 'ff'

# print(int('0a10', 0))
# ValueError: invalid literal for int() with base 0: '0a10'

# print(int('0bff', 0))
# ValueError: invalid literal for int() with base 0: '0bff'

လျှောက်လွှာဥပမာများ

Binary string ဂဏန်းသင်္ချာ

ဥပမာအားဖြင့်၊ ရှေ့ဆက် 0b ဖြင့် binary notation တွင် string တစ်ခုပေါ်တွင် လုပ်ဆောင်ချက်တစ်ခုကို လုပ်ဆောင်ရန်။

၎င်းကို ဂဏန်းတန်ဖိုး (integer type int) သို့ အလွယ်တကူ ပြောင်းနိုင်သည်၊ ၎င်းတွင် လုပ်ဆောင်ချက်များကို လုပ်ဆောင်ပြီးနောက် ၎င်းကို string str သို့ တစ်ဖန်ပြောင်းနိုင်သည်။

a = '0b1001'
b = '0b0011'

c = int(a, 0) + int(b, 0)

print(c)
print(bin(c))
# 12
# 0b1100

ဒွိ၊ အဋ္ဌမ၊ နှင့် ဆဋ္ဌမကိန်းဂဏန်းများအကြား ပြောင်းပါ။

binary၊ octal နှင့် hexadecimal strings များကို တစ်ခုနှင့်တစ်ခုသို့ ပြောင်းရန်လည်း လွယ်ကူပါသည်။ numeric int သို့ပြောင်းပြီးသည်နှင့် ၎င်းကို မည်သည့်ဖော်မတ်မဆို string တစ်ခုသို့ ပြောင်းနိုင်သည်။

Zero-filling၊ prefixing စသည်တို့ကို formatting specification string ဖြင့် ထိန်းချုပ်နိုင်သည်။

a_0b = '0b1110001010011'

print(format(int(a, 0), '#010x'))
# 0x00000009

print(format(int(a, 0), '#010o'))
# 0o00000011