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 meetod
str.format()
, Sisseehitatud funktsioonidformat()
, f string - Teisendab negatiivse täisarvu stringiks kahekomplektilises formaadis.
- sisseehitatud funktsioon (nt programmeerimiskeeles)
- Teisenda stringid binaarses, oktaal- ja kuueteistkümnendsüsteemis numbriteks.
- sisseehitatud funktsioon (nt programmeerimiskeeles)
int()
- sisseehitatud funktsioon (nt programmeerimiskeeles)
- 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:
0b
või0B
- Octal:
0o
või0O
- Hexadecimal number:
0x
võ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 meetod
str.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
- 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'>
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:
0b
või0B
- Octal prefix:
0o
või0O
- Kuueteistkümnendsüsteemi eesliide:
0x
võ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