Python нь тоо, мөрийг хоёртын, наймтын, арван арвантын тоо болон ердийн аравтын тоогоор зохицуулж чаддаг. Мөн тэдгээрийн хооронд хөрвүүлэхэд хялбар байдаг.
Энэ хэсэгт дараах агуулгыг жишээ кодын хамт тайлбарлах болно.
- Бүхэл тоог хоёртын, наймтын, арван зургаатын системд бичнэ.
- Хоёртын, наймтын, арван зургаатын тооллын тоонуудыг мөр болгон хөрвүүлэх.
- суулгасан функц (жишээ нь програмчлалын хэл дээр)
bin()
,oct()
,hex()
- мөр арга
str.format()
, Суулгасан функцуудformat()
, f мөр - Сөрөг бүхэл тоог хоёр нөхөх форматаар мөр болгон хөрвүүлнэ.
- суулгасан функц (жишээ нь програмчлалын хэл дээр)
- Хоёртын, наймтын, арван зургаатын тооллын тэмдэгтийн мөрүүдийг тоо болгон хөрвүүлэх.
- суулгасан функц (жишээ нь програмчлалын хэл дээр)
int()
- суулгасан функц (жишээ нь програмчлалын хэл дээр)
- Хэрэглээний жишээ
- Хоёртын мөрт арифметик
- Хоёртын, наймтын, арван зургаатын тоонуудын хооронд хөрвүүлэх
Бүхэл тоог хоёртын, наймтын, арван зургаатын системд бичнэ.
Дараах угтваруудыг нэмснээр бүхэл тоон int тоог хоёртын, наймтын, арван зургаатын системд тус тус бичиж болно.
Та мөн том үсгийг ашиглаж болно.
- Хоёртын тоо:
0b
эсвэл0B
- Найман:
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-аас эхлэн тоон дотор доогуур зураас _ оруулах боломжтой. Доод зураасыг _ давтвал алдаа гарах боловч давтахгүй л бол хүссэн хэмжээгээрээ оруулж болно.
_ доогуур зураас нь тоонд нөлөөлөхгүй тул олон оронтой үед ялгагч болгон ашиглаж болно. Жишээлбэл, дөрвөн оронтой тоо бүрт доогуур зураас _ оруулах нь уншихад хялбар байдаг.
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
- bin() — Built-in Functions — Python 3.10.0 Documentation
- oct() — Built-in Functions — Python 3.10.0 Documentation
- hex() — Built-in Functions — Python 3.10.0 Documentation
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'>
Баригдсан функцийн формат(), мөрийн арга str.format(), f мөр
Суурилуулсан функц формат() болон str.format() болон f-string мөрийн аргууд нь тоонуудыг хоёртын, наймтын, арван зургаатын тоот мөр болгон хувиргаж чаддаг.
Format()-ын хоёр дахь аргументыг дараах байдлаар зааж өгснөөр үүнийг хоёртын, наймтын, арван зургаатын тоот мөр болгон хөрвүүлж болно.
- Хоёртын тоо:
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 хэл дээр сөрөг бүхэл тоон дээрх битийн үйлдлүүдийг мөн хоёрын нөхөх дүрслэлд гүйцэтгэдэг. Тиймээс, хэрэв та хоёрын нөхөх хэлбэрээр илэрхийлэгдсэн мөрийг авахыг хүсвэл битийн логик 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 болгон хувиргаж болно. Хэрэв радиксыг орхигдуулсан бол тоог аравтын бутархай гэж үзнэ.
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 гэж тохируулсан бол хөрвүүлэлтийг дараах мөрийн угтвар дээр үндэслэн хийнэ.
- Хоёртын угтвар:
0b
эсвэл0B
- Найман угтвар:
0o
эсвэл0O
- Арван арвантын угтвар:
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'
Хэрэглээний жишээ
Хоёртын мөрт арифметик
Жишээлбэл, 0b угтвартай хоёртын тэмдэглэгээнд мөр дээр үйлдэл хийх.
Та үүнийг хялбархан тоон утга руу (бүхэл төрлийн int) хөрвүүлж, үүн дээр үйлдлүүдийг хийж, дараа нь дахин 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