I-convert ang binary, octal, at hexadecimal na mga numero at string papunta at mula sa isa’t isa sa Python

Negosyo

Maaaring pangasiwaan ng Python ang mga numero at string bilang mga binary, octal, at hexadecimal na mga numero pati na rin ang karaniwang mga decimal na numero. Madali ring mag-convert sa pagitan nila.

Sa seksyong ito, ipapaliwanag ang mga sumusunod na nilalaman kasama ng sample code.

  • Sumulat ng mga integer sa binary, octal, at hexadecimal.
  • I-convert ang mga numero sa mga string sa binary, octal, at hexadecimal notation.
    • built-in na function (hal. sa programming language)bin(),oct(),hex()
    • paraan ng stringstr.format(), Mga Built-in na Functionformat(), f string
    • I-convert ang isang negatibong integer sa isang string sa format ng complement ng dalawa.
  • I-convert ang mga string sa binary, octal, at hexadecimal notation sa mga numero.
    • built-in na function (hal. sa programming language)int()
  • Mga Halimbawa ng Application
    • Binary string arithmetic
    • I-convert sa pagitan ng binary, octal, at hexadecimal na mga numero

Sumulat ng mga integer sa binary, octal, at hexadecimal.

Sa pamamagitan ng pagdaragdag ng mga sumusunod na prefix, ang mga integer int na numero ay maaaring isulat sa binary, octal, at hexadecimal, ayon sa pagkakabanggit.
Maaari ka ring gumamit ng malalaking titik.

  • Binary na numero:0bo0B
  • Octal:0oo0O
  • Hexadecimal na numero:0xo0X

Ang output ng print() ay nasa decimal notation.

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

Kahit na may prefix, ang uri ay isang integer 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'>

Dahil ito ay isang uri ng integer, maaari itong magamit para sa mga regular na operasyon ng arithmetic.

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

Simula sa Python 3.6, posibleng magpasok ng mga underscore _ sa mga numero. Ang pag-uulit ng underscore _ ay magreresulta sa isang error, ngunit maaari mong ipasok ang marami hangga’t gusto mo hangga’t hindi mo ito uulitin.

Ang _ underscore ay hindi nakakaapekto sa numero, kaya maaari itong magamit bilang isang separator kapag maraming digit. Halimbawa, ang paglalagay ng underscore _ bawat apat na digit ay madaling basahin.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

I-convert ang mga numero sa mga string sa binary, octal, at hexadecimal notation.

Upang i-convert ang isang numero sa isang string sa binary, octal, o hexadecimal notation, gamitin ang mga sumusunod na built-in na function.

  • built-in na function (hal. sa programming language)bin(),oct(),hex()
  • paraan ng stringstr.format(), Mga Built-in na Functionformat(), f string

Ipinapaliwanag din ng seksyong ito kung paano ipahayag ang isang string sa format na pandagdag ng dalawa para sa mga negatibong halaga.

Mga built-in na function bin(), oct(), hex()

Ang mga sumusunod na built-in na function ay maaaring mag-convert ng mga numero sa binary, octal, at hexadecimal string.

  • Binary na numero:bin()
  • Octal:oct()
  • Hexadecimal na numero:hex()

Bawat isa ay nagbabalik ng string na may mga sumusunod na prefix

  • Binary na numero:0b
  • Octal:0o
  • Hexadecimal na numero: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'>

Kung hindi mo kailangan ang prefix, gamitin ang slice[2:] para i-extract ang string sa likod nito, o gamitin ang format() gaya ng ipinaliwanag sa susunod.

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

Kung gusto mong i-convert ito sa isang decimal string, maaari mong gamitin ang str().

print(str(i))
# 255

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

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

Ang built-in na function format() at ang mga string method na str.format() at f-string ay maaari ding mag-convert ng mga numero sa binary, octal, at hexadecimal string.

Sa pamamagitan ng pagtukoy sa pangalawang argument ng format() bilang mga sumusunod, maaari itong ma-convert sa binary, octal, at hexadecimal string, ayon sa pagkakabanggit.

  • Binary na numero:b
  • Octal:o
  • Hexadecimal na numero: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'>

Kung gusto mong makakuha ng string na may prefix na 0b,0o,0x, magdagdag ng # sa string ng detalye ng pag-format.

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

Posible ring punan ang 0 ng anumang bilang ng mga digit. Tandaan na ang bilang ng mga character para sa prefix (dalawang character) ay dapat ding isaalang-alang kapag pinupunan ang zero na may prefix.

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

Ang string method na str.format() ay magagamit din para sa conversion.

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

Simula sa Python 3.6, maaari mo ring gamitin ang f string.f'xxx'

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

I-convert ang isang negatibong integer sa isang string sa format ng complement ng dalawa.

Kapag ang isang negatibong integer ay na-convert sa isang binary o hexadecimal string gamit ang bin() o format(), ang absolute value ay magkakaroon ng minus sign.

x = -9

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

Sa Python, ang mga bitwise na operasyon sa mga negatibong integer ay ginagawa din sa representasyon ng complement ng dalawa. Samakatuwid, kung gusto mong makakuha ng string na ipinahayag sa two’s complement form, maaari kang kumuha ng bitwise logical OR& na may pinakamataas na bilang ng mga bit digit na kinakailangan, tulad ng sumusunod.

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

I-convert ang mga string sa binary, octal, at hexadecimal notation sa mga numero.

Built-in na function int()

Upang i-convert ang isang string sa binary, octal, o hexadecimal notation sa isang numero, gamitin ang built-in na function na int().

Gamit ang int(string, radix), ang isang string str sa binary, octal, hexadecimal notation, atbp. ay maaaring ma-convert sa isang numeric int batay sa radix. Kung ang radix ay tinanggal, ang numero ay itinuturing na decimal.

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

Kung ang radix ay nakatakda sa 0, ang conversion ay ginagawa batay sa sumusunod na string prefix.

  • Binary prefix:0bo0B
  • Octal prefix:0oo0O
  • Hexadecimal prefix:0xo0X
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

Kung ang batayang numero ay 0 at walang prefix, ito ay mako-convert bilang isang decimal na numero, ngunit tandaan na kung ang simula (kaliwang bahagi) ay puno ng 0, isang error ang magaganap.

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

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

Sa iba pang mga kaso, ang mga zero-filled na string ay maaaring ma-convert bilang ay.

print(int('010'))
# 10

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

Kung hindi mako-convert ang string gamit ang tinukoy na radix o prefix, magkakaroon ng error.

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

Mga Halimbawa ng Application

Binary string arithmetic

Halimbawa, upang magsagawa ng operasyon sa isang string sa binary notation na may prefix na 0b.

Madali mong mako-convert ito sa isang numeric na halaga (integer type int), magsagawa ng mga operasyon dito, at pagkatapos ay i-convert ito pabalik sa isang string str muli.

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

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

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

I-convert sa pagitan ng binary, octal, at hexadecimal na mga numero

Madali ring i-convert ang binary, octal, at hexadecimal string sa isa’t isa. Kapag na-convert sa isang numeric int, maaari itong ma-convert sa isang string ng anumang format.

Ang zero-filling, prefixing, atbp. ay maaaring kontrolin ng string ng detalye ng pag-format.

a_0b = '0b1110001010011'

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

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