Binaarsete, oktaal- ja heksadetsimaalsete arvude ja stringide teisendamine Pythonis teineteiseks ja teiseks.

Äri

Samuti on lihtne nende vahel teisendada.

Selles jaotises selgitatakse järgmist sisu koos näidiskoodiga.

  • Kirjutage täisarvud kahe-, kaheksa- ja kuueteistkümnendsüsteemis.
  • Arvude teisendamine stringideks binaarses, oktaal- ja kuueteistkümnendsüsteemis.
    • sisseehitatud funktsioon (nt programmeerimiskeeles)bin(),oct(),hex()
    • string meetodstr.format(), Sisseehitatud funktsioonidformat(), f string
    • Teisendab negatiivse täisarvu stringiks kahekomplektilises formaadis.
  • Teisenda stringid binaarses, oktaal- ja kuueteistkümnendsüsteemis numbriteks.
    • sisseehitatud funktsioon (nt programmeerimiskeeles)int()
  • Rakendusnäited
    • Binaarne stringi aritmeetika
    • Binaarsete, oktaal- ja heksadekaalarvude teisendamine

Kirjutage täisarvud kahe-, kaheksa- ja kuueteistkümnendsüsteemis.

Lisades järgmised eesliited, saab täisarvu int numbreid kirjutada vastavalt kahe-, kaheksa- ja kuueteistkümnendsüsteemis.
Võite kasutada ka suuri tähti.

  • Binaarne number:0bvõi0B
  • Octal:0ovõi0O
  • Hexadecimal number:0xvõi0X

print() väljund on kümnendmurdes.

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

Isegi koos eesliitega on tüüp täisarv 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'>

Kuna tegemist on täisarvu tüübiga, saab seda kasutada tavaliste aritmeetiliste operatsioonide tegemiseks.

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

Alates Python 3.6-st on võimalik sisestada numbritesse alajaotusi _. Alamkriipsu _ kordamine annab vea, kuid võite sisestada nii palju kui soovite, kui te seda ei korda.

Alamriba _ ei mõjuta numbrit, seega võib seda kasutada eraldajana, kui numbreid on palju. Näiteks on lihtne lugeda, kui sisestada alajaotus _ iga nelja numbri järel.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Arvude teisendamine stringideks binaarses, oktaal- ja kuueteistkümnendsüsteemis.

Arvude teisendamiseks stringiks binaarses, oktaal- või heksadetsimaalses märkimisviisis kasutage järgmisi sisseehitatud funktsioone.

  • sisseehitatud funktsioon (nt programmeerimiskeeles)bin(),oct(),hex()
  • string meetodstr.format(), Sisseehitatud funktsioonidformat(), f string

Selles jaotises selgitatakse ka seda, kuidas saada negatiivsete väärtuste puhul string, mis on väljendatud kahekomplektilises formaadis.

Sisseehitatud funktsioonid bin(), oct(), hex()

Järgmised sisseehitatud funktsioonid saavad teisendada numbreid binaarseteks, kaheksakohalisteks ja kuueteistkümnendkümnendkümnenditeks.

  • Binaarne number:bin()
  • Octal:oct()
  • Hexadecimal number:hex()

Igaüks tagastab stringi järgmiste eesliitega

  • Binaarne number:0b
  • Octal:0o
  • Hexadecimal number: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'>

Kui te ei vaja eesliidet, kasutage slice[2:], et eraldada selle taga olev string või kasutage formaat(), nagu on selgitatud allpool.

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

Kui soovite selle teisendada kümnendsõna, võite kasutada funktsiooni str().

print(str(i))
# 255

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

Sisseehitatud funktsioon format(), string meetod str.format(), f string

Sisseehitatud funktsioon format() ja stringi meetodid str.format() ja f-string suudavad teisendada numbreid ka binaarseteks, kaheksakohalisteks ja kuuekohalisteks stringideks.

Määrates format() teise argumendi järgmiselt, saab selle teisendada vastavalt binaarseks, kaheksakohaliseks ja kuueteistkümnendiks.

  • Binaarne number:b
  • Octal:o
  • Hexadecimal number: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'>

Kui soovite saada stringi eesliitega 0b,0o,0x, lisage # vormingu spetsifikatsiooni stringile.

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

Samuti on võimalik täita 0 suvalise arvu numbritega. Pange tähele, et nulli täitmisel eesliitega tuleb arvesse võtta ka eesliite täites numbrite arvu (kaks märki).

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

Konversiooniks saab kasutada ka stringi meetodit str.format().

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

Alates Python 3.6-st saab kasutada ka stringi f.f'xxx'

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

Teisendab negatiivse täisarvu stringiks kahekomplektilises formaadis.

Kui negatiivne täisarv teisendatakse bin() või format() abil binaarseks või heksadetsimaalseks stringiks, on absoluutväärtus miinusmärgiga.

x = -9

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

Pythonis tehakse bittide kaupa operatsioone negatiivsete täisarvudega ka kahekomplektilises esituses. Seega, kui soovite saada stringi väljendatuna kahekomplektilises vormis, võite võtta bititiheda loogilise OR&-iga maksimaalse vajaliku arvu bittide arvu, nagu järgnevalt.

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

Teisenda stringid binaarses, oktaal- ja kuueteistkümnendsüsteemis numbriteks.

Sisseehitatud funktsioon int()

Binaarses, oktaal- või kuueteistkümnendsüsteemis stringi teisendamiseks arvuks kasutage sisseehitatud funktsiooni int().

Programmi int(string, radix) abil saab stringi str binaarses, oktaalses, kuueteistkümnendsüsteemis jne teisendada numbriliseks int-ks, mis põhineb radixil. Kui radix jäetakse ära, loetakse arv kümnendmõõdustikuks.

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

Kui radixiks on määratud 0, toimub teisendamine järgmise stringi prefiksi alusel.

  • Binaarne eesliide:0bvõi0B
  • Octal prefix:0ovõi0O
  • Kuueteistkümnendsüsteemi eesliide:0xvõi0X
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

Kui baasnumber on 0 ja puudub eesliide, teisendatakse see kümnendarvuks, kuid pange tähele, et kui algus (vasakpoolne osa) on täidetud 0-ga, tekib viga.

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

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

Muudel juhtudel saab nulliga täidetud stringid konverteerida sellisena, nagu need on.

print(int('010'))
# 10

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

Kui stringi ei saa konverteerida määratud radiksi või prefiksiga, tekib viga.

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

Rakendusnäited

Binaarne stringi aritmeetika

Näiteks, et teha operatsioon stringiga binaarses märkimises, mille eesliide on 0b.

Saate selle hõlpsasti teisendada numbriliseks väärtuseks (täisarvu tüüpi int), teha sellega operatsioone ja seejärel teisendada selle uuesti stringiks str.

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

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

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

Binaarsete, oktaal- ja heksadekaalarvude teisendamine

Samuti on lihtne teisendada binaar-, oktaal- ja heksadekaalseid stringid üksteiseks. Kui see on teisendatud numbriliseks int-iks, saab seda teisendada mis tahes formaadis stringiks.

Nullide täitmist, eesliite jne saab kontrollida vormindamise spetsifikatsiooni stringi abil.

a_0b = '0b1110001010011'

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

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