Konvertoni numrat dhe vargjet binar, oktal dhe heksadecimal me dhe nga njëri-tjetri në Python

biznes

Python mund të trajtojë numrat dhe vargjet si numra binarë, oktalë dhe heksadecimalë, si dhe numra dhjetorë të zakonshëm. Është gjithashtu e lehtë të konvertohet mes tyre.

Në këtë seksion, përmbajtja e mëposhtme do të shpjegohet së bashku me kodin e mostrës.

  • Shkruani numra të plotë në binar, oktal dhe heksadecimal.
  • Shndërroni numrat në vargje në shënime binar, oktal dhe heksadecimal.
    • funksion i integruar (p.sh. në gjuhën e programimit)bin(),oct(),hex()
    • metoda e vargutstr.format(), Funksionet e integruaraformat(), f varg
    • Konvertoni një numër të plotë negativ në një varg në formatin e plotësimit të dy.
  • Konvertoni vargjet në shënime binar, oktal dhe heksadecimal në numra.
    • funksion i integruar (p.sh. në gjuhën e programimit)int()
  • Shembuj aplikimi
    • Aritmetika e vargut binar
    • Konvertoni midis numrave binar, oktal dhe heksadecimal

Shkruani numra të plotë në binar, oktal dhe heksadecimal.

Duke shtuar parashtesat e mëposhtme, numrat int të plotë mund të shkruhen përkatësisht në binar, oktal dhe heksadecimal.
Ju gjithashtu mund të përdorni shkronja të mëdha.

  • Numri binar:0bose0B
  • oktal:0oose0O
  • Numri heksadecimal:0xose0X

Prodhimi i print() do të jetë me shënim dhjetor.

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

Edhe me parashtesën, lloji është një numër i plotë 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'>

Meqenëse është një tip numër i plotë, mund të përdoret për veprime të rregullta aritmetike.

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

Duke filluar me Python 3.6, është e mundur të futni nënvizat _ në numra. Përsëritja e një nënvizimi _ do të rezultojë në një gabim, por mund të futni sa të doni për sa kohë që nuk e përsërisni.

Nënvizimi _ nuk ndikon në numrin, kështu që mund të përdoret si ndarës kur ka shumë shifra. Për shembull, futja e një nënvizimi _ çdo katër shifra është e lehtë për t’u lexuar.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Shndërroni numrat në vargje në shënime binar, oktal dhe heksadecimal.

Për të kthyer një numër në një varg në shënimin binar, oktal ose heksadecimal, përdorni funksionet e integruara të mëposhtme.

  • funksion i integruar (p.sh. në gjuhën e programimit)bin(),oct(),hex()
  • metoda e vargutstr.format(), Funksionet e integruaraformat(), f varg

Ky seksion shpjegon gjithashtu se si të merrni një varg të shprehur në formatin e plotësimit të dy për vlerat negative.

Funksionet e integruara bin(), oct(), hex()

Funksionet e integruara në vijim mund të konvertojnë numrat në vargje binare, oktale dhe heksadecimal.

  • Numri binar:bin()
  • oktal:oct()
  • Numri heksadecimal:hex()

Secili kthen një varg me parashtesat e mëposhtme

  • Numri binar:0b
  • oktal:0o
  • Numri heksadecimal: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'>

Nëse nuk ju nevojitet prefiksi, përdorni slice[2:] për të nxjerrë vargun pas tij, ose përdorni format() siç shpjegohet më poshtë.

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

Nëse dëshironi ta konvertoni atë në një varg dhjetor, mund të përdorni str().

print(str(i))
# 255

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

Formati i funksionit të integruar(), metoda e vargut str.format(), vargu f

Formati i integruar i funksionit () dhe metodat e vargut str.format () dhe f-string mund të konvertojnë numrat në vargje binar, oktal dhe heksadecimal.

Duke specifikuar argumentin e dytë të format() si më poshtë, ai mund të konvertohet në vargje binar, oktal dhe heksadecimal, përkatësisht.

  • Numri binar:b
  • oktal:o
  • Numri heksadecimal: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'>

Nëse dëshironi të merrni një varg me prefiksin 0b,0o,0x, shtoni # në vargun e specifikimit të formatimit.

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

Është gjithashtu e mundur të plotësohet 0 me çdo numër shifrash. Vini re se numri i karaktereve për parashtesën (dy karaktere) gjithashtu duhet të merret parasysh kur plotësoni zero me një parashtesë.

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

Metoda e vargut str.format() mund të përdoret gjithashtu për konvertim.

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

Duke filluar me Python 3.6, mund të përdorni edhe vargun f.f'xxx'

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

Konvertoni një numër të plotë negativ në një varg në formatin e plotësimit të dy.

Kur një numër i plotë negativ konvertohet në një varg binar ose heksadecimal duke përdorur bin() ose format(), vlera absolute do të ketë një shenjë minus.

x = -9

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

Në Python, operacionet bitwise në numrat e plotë negativ kryhen gjithashtu në paraqitjen e dy komplementit. Prandaj, nëse doni të merrni një varg të shprehur në formën e plotësimit të dy, ju mund të merrni një logjikë OR& me numrin maksimal të shifrave të bitave të kërkuara, si më poshtë.

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

Konvertoni vargjet në shënime binar, oktal dhe heksadecimal në numra.

Funksioni i integruar int()

Për të kthyer një varg në shënimin binar, oktal ose heksadecimal në një numër, përdorni funksionin e integruar int().

Me int(string, radix), një varg string në shënimin binar, oktal, hexadecimal, etj. mund të konvertohet në një int numerike bazuar në radix. Nëse radiksi hiqet, numri konsiderohet dhjetor.

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

Nëse radiksi është vendosur në 0, konvertimi bëhet në bazë të prefiksit të vargut të mëposhtëm.

  • Prefiksi binar:0bose0B
  • Prefiksi oktal:0oose0O
  • Prefiksi heksadecimal:0xose0X
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

Nëse numri bazë është 0 dhe nuk ka prefiks, ai do të konvertohet si numër dhjetor, por vini re se nëse fillimi (ana e majtë) është e mbushur me 0, do të ndodhë një gabim.

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

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

Në raste të tjera, vargjet e mbushura me zero mund të konvertohen siç janë.

print(int('010'))
# 10

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

Nëse vargu nuk mund të konvertohet me bazën ose prefiksin e specifikuar, ndodh një gabim.

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

Shembuj aplikimi

Aritmetika e vargut binar

Për shembull, për të kryer një operacion në një varg në shënimin binar me prefiksin 0b.

Mund ta konvertoni lehtësisht në një vlerë numerike (lloji i plotë int), të kryeni operacione mbi të dhe më pas ta ktheni përsëri në një varg str.

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

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

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

Konvertoni midis numrave binar, oktal dhe heksadecimal

Është gjithashtu e lehtë të konvertohen vargjet binar, oktal dhe heksadecimal me njëri-tjetrin. Pasi të konvertohet në një int numerik, ai mund të konvertohet në një varg të çdo formati.

Mbushja e zeros, prefiksimi, etj. mund të kontrollohen nga vargu i specifikimit të formatimit.

a_0b = '0b1110001010011'

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

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