បំប្លែងលេខគោលពីរ គោលប្រាំបី និងលេខគោលដប់ប្រាំមួយ និងខ្សែអក្សរទៅ និងពីគ្នាទៅវិញទៅមកនៅក្នុង Python

អាជីវកម្ម

Python អាចគ្រប់គ្រងលេខ និងខ្សែជាលេខគោលពីរ លេខគោលប្រាំបី និងលេខគោលដប់ប្រាំមួយ ព្រមទាំងលេខទសភាគធម្មតា។ វាក៏ងាយស្រួលក្នុងការបំប្លែងរវាងពួកវាផងដែរ។

នៅក្នុងផ្នែកនេះ ខ្លឹមសារខាងក្រោមនឹងត្រូវបានពន្យល់ រួមជាមួយនឹងកូដគំរូ។

  • សរសេរចំនួនគត់ជាគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយ។
  • បំប្លែងលេខទៅជាអក្សរនៅក្នុងសញ្ញាគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយ។
    • មុខងារដែលភ្ជាប់មកជាមួយ (ឧ. ជាភាសាសរសេរកម្មវិធី)bin(),oct(),hex()
    • វិធីសាស្រ្តខ្សែអក្សរstr.format(), មុខងារភ្ជាប់មកជាមួយformat(), f ខ្សែអក្សរ
    • បំប្លែងចំនួនគត់អវិជ្ជមានទៅជាខ្សែអក្សរក្នុងទម្រង់បំពេញបន្ថែមរបស់ពីរ។
  • បំប្លែងខ្សែអក្សរជាគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយទៅជាលេខ។
    • មុខងារដែលភ្ជាប់មកជាមួយ (ឧ. ជាភាសាសរសេរកម្មវិធី)int()
  • ឧទាហរណ៍នៃកម្មវិធី
    • នព្វន្ធខ្សែអក្សរគោលពីរ
    • បំប្លែងរវាងលេខគោលពីរ លេខគោលប្រាំបី និងលេខគោលដប់ប្រាំមួយ។

សរសេរចំនួនគត់ជាគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយ។

ដោយបន្ថែមបុព្វបទខាងក្រោម លេខ int ចំនួនគត់អាចត្រូវបានសរសេរជាគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយ រៀងគ្នា។
អ្នកក៏អាចប្រើអក្សរធំផងដែរ។

  • លេខគោលពីរ៖0b0B
  • ប្រាំបី៖0o0O
  • លេខគោលដប់ប្រាំមួយ៖0x0X

លទ្ធផលនៃ 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 វាអាចបញ្ចូលសញ្ញាគូសក្រោម _ ជាលេខ។ ការធ្វើម្តងទៀតនូវសញ្ញាគូសក្រោម _ នឹងបណ្តាលឱ្យមានកំហុស ប៉ុន្តែអ្នកអាចបញ្ចូលបានច្រើនតាមដែលអ្នកចូលចិត្ត ដរាបណាអ្នកមិនធ្វើវាម្តងទៀត។

សញ្ញា _ គូស​ក្រោម​មិន​ប៉ះ​ពាល់​ដល់​លេខ​ទេ ដូច្នេះ​វា​អាច​ប្រើ​ជា​សញ្ញា​បំបែក​បាន​នៅ​ពេល​ដែល​មាន​ច្រើន​ខ្ទង់។ ឧទាហរណ៍ ការបញ្ចូលសញ្ញាគូសក្រោម _ រៀងរាល់បួនខ្ទង់គឺងាយស្រួលអាន។

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

បំប្លែងលេខទៅជាអក្សរនៅក្នុងសញ្ញាគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយ។

ដើម្បីបំប្លែងលេខទៅជាខ្សែអក្សរក្នុងសញ្ញាគោលពីរ គោលដប់ប្រាំបី ឬគោលដប់ប្រាំមួយ សូមប្រើមុខងារដែលភ្ជាប់មកជាមួយខាងក្រោម។

  • មុខងារដែលភ្ជាប់មកជាមួយ (ឧ. ជាភាសាសរសេរកម្មវិធី)bin(),oct(),hex()
  • វិធីសាស្រ្តខ្សែអក្សរstr.format(), មុខងារភ្ជាប់មកជាមួយformat(), f ខ្សែអក្សរ

ផ្នែកនេះក៏ពន្យល់ពីរបៀបដើម្បីទទួលបានខ្សែអក្សរដែលបង្ហាញក្នុងទម្រង់បំពេញបន្ថែមរបស់ពីរសម្រាប់តម្លៃអវិជ្ជមាន។

មុខងារភ្ជាប់មកជាមួយ bin(), oct(), hex()

មុខងារដែលភ្ជាប់មកជាមួយខាងក្រោមអាចបំប្លែងលេខទៅជាជួរគោលពីរ គោលប្រាំបី និងលេខគោលដប់ប្រាំមួយ។

  • លេខគោលពីរ៖bin()
  • ប្រាំបី៖oct()
  • លេខគោលដប់ប្រាំមួយ៖hex()

នីមួយៗត្រឡប់ខ្សែអក្សរដែលមានបុព្វបទខាងក្រោម

  • លេខគោលពីរ៖0b
  • ប្រាំបី៖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'>

ប្រសិនបើអ្នកមិនត្រូវការបុព្វបទទេ សូមប្រើចំណិត[2:] ដើម្បីស្រង់ខ្សែអក្សរនៅពីក្រោយវា ឬប្រើទម្រង់ () ដូចដែលបានពន្យល់បន្ទាប់។

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'>

ទម្រង់មុខងារដែលភ្ជាប់មកជាមួយ(), វិធីសាស្ត្រខ្សែអក្សរ str.format(), f string

ទម្រង់មុខងារដែលភ្ជាប់មកជាមួយ() និងវិធីខ្សែអក្សរ str.format() និង f-string ក៏អាចបំប្លែងលេខទៅជាខ្សែអក្សរគោលពីរ គោលប្រាំបី និងគោលដប់ប្រាំមួយផងដែរ។

ដោយ​បញ្ជាក់​អាគុយម៉ង់​ទីពីរ​នៃ​ទម្រង់ () ដូច​ខាង​ក្រោម វា​អាច​ត្រូវ​បាន​បំប្លែង​ទៅ​ជា​ខ្សែ​អក្សរ​គោលពីរ គោលប្រាំបី និង​គោលដប់ប្រាំមួយ​រៀងៗខ្លួន។

  • លេខគោលពីរ៖b
  • ប្រាំបី៖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

វិធីសាស្ត្រខ្សែអក្សរ str.format() អាចត្រូវបានប្រើសម្រាប់ការបំប្លែងផងដែរ។

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

ចាប់ផ្តើមជាមួយ Python 3.6 អ្នកក៏អាចប្រើខ្សែអក្សរ f ផងដែរ។f'xxx'

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

បំប្លែងចំនួនគត់អវិជ្ជមានទៅជាខ្សែអក្សរក្នុងទម្រង់បំពេញបន្ថែមរបស់ពីរ។

នៅពេលដែលចំនួនគត់អវិជ្ជមានត្រូវបានបំប្លែងទៅជាជួរគោលពីរ ឬគោលដប់ប្រាំមួយដោយប្រើ bin() ឬ format() តម្លៃដាច់ខាតនឹងមានសញ្ញាដក។

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

បំប្លែងខ្សែអក្សរជាគោលពីរ គោលដប់ប្រាំបី និងគោលដប់ប្រាំមួយទៅជាលេខ។

មុខងារភ្ជាប់មកជាមួយ int()

ដើម្បីបំប្លែងខ្សែអក្សរក្នុងសញ្ញាគោលពីរ គោលប្រាំបី ឬគោលដប់ប្រាំមួយទៅជាលេខ សូមប្រើមុខងារដែលភ្ជាប់មកជាមួយ int()។

ជាមួយ int (string, radix) ខ្សែអក្សរ str ក្នុងគោលពីរ គោលប្រាំបី សញ្ញាគោលដប់ប្រាំមួយ ។ល។ អាចត្រូវបានបំប្លែងទៅជាលេខ int ដោយផ្អែកលើ radix ។ ប្រសិនបើ​រ៉ាឌីក​ត្រូវ​បាន​លុប​ចោល នោះ​លេខ​ត្រូវ​បាន​ចាត់​ទុក​ថា​ជា​ទសភាគ។

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'>

ប្រសិនបើ radix ត្រូវបានកំណត់ទៅ 0 ការបំប្លែងត្រូវបានធ្វើឡើងដោយផ្អែកលើបុព្វបទខ្សែខាងក្រោម។

  • បុព្វបទគោលពីរ៖0b0B
  • បុព្វបទ Octal៖0o0O
  • បុព្វបទគោលដប់ប្រាំមួយ៖0x0X
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'

ឧទាហរណ៍នៃកម្មវិធី

នព្វន្ធខ្សែអក្សរគោលពីរ

ឧទាហរណ៍ ដើម្បីអនុវត្តប្រតិបត្តិការលើខ្សែអក្សរក្នុងសញ្ញាគោលពីរដែលមានបុព្វបទ 0b ។

អ្នកអាចបំប្លែងវាទៅជាតម្លៃលេខបានយ៉ាងងាយស្រួល (ចំនួនគត់ប្រភេទ int) អនុវត្តប្រតិបត្តិការលើវា ហើយបន្ទាប់មកបំប្លែងវាទៅជា str str ម្តងទៀត។

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

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

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

បំប្លែងរវាងលេខគោលពីរ លេខគោលប្រាំបី និងលេខគោលដប់ប្រាំមួយ។

វាក៏ងាយស្រួលក្នុងការបំប្លែងខ្សែអក្សរគោលពីរ គោលប្រាំបី និងគោលដប់ប្រាំមួយទៅគ្នាទៅវិញទៅមក។ នៅពេលបំប្លែងទៅជាលេខ int វាអាចត្រូវបានបំប្លែងទៅជាខ្សែអក្សរនៃទ្រង់ទ្រាយណាមួយ។

ការបំពេញសូន្យ បុព្វបទ។ល។ អាចត្រូវបានគ្រប់គ្រងដោយខ្សែអក្សរបញ្ជាក់ទម្រង់។

a_0b = '0b1110001010011'

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

print(format(int(a, 0), '#010o'))
# 0o00000011
Copied title and URL