Chatu inaweza kushughulikia nambari na mifuatano kama nambari za binary, octal, na heksadesimali pamoja na nambari za desimali za kawaida. Pia ni rahisi kubadilisha kati yao.
Katika sehemu hii, yaliyomo yafuatayo yataelezwa pamoja na msimbo wa sampuli.
- Andika nambari kamili katika binary, octal, na hexadesimoli.
- Badilisha nambari ziwe mifuatano katika nukuu ya binary, octal, na heksadesimali.
- kitendakazi kilichojumuishwa (k.m. katika lugha ya programu)
bin()
,oct()
,hex()
- njia ya kamba
str.format()
, Kazi Zilizojengwaformat()
, mfuatano wa f - Badilisha nambari hasi kuwa mfuatano katika umbizo kamilishano la wawili.
- kitendakazi kilichojumuishwa (k.m. katika lugha ya programu)
- Badilisha mifuatano katika nukuu ya binary, octal, na heksadesimali kuwa nambari.
- kitendakazi kilichojumuishwa (k.m. katika lugha ya programu)
int()
- kitendakazi kilichojumuishwa (k.m. katika lugha ya programu)
- Mifano ya Maombi
- Hesabu ya kamba ya binary
- Badilisha kati ya nambari za binary, octal, na hexadesimoli
Andika nambari kamili katika binary, octal, na hexadesimoli.
Kwa kuongeza viambishi vifuatavyo, nambari kamili int inaweza kuandikwa kwa binary, octal, na hexadesimoli, mtawalia.
Unaweza pia kutumia herufi kubwa.
- Nambari ya binary:
0b
au0B
- Octal:
0o
au0O
- Nambari ya heksadesimali:
0x
au0X
Matokeo ya print() yatakuwa katika nukuu ya desimali.
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
Hata kwa kiambishi awali, aina ni int kamili.
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'>
Kwa kuwa ni aina kamili, inaweza kutumika kwa shughuli za kawaida za hesabu.
result = 0b10 * 0o10 + 0x10
print(result)
# 32
Kuanzia na Python 3.6, inawezekana kuingiza underscores _ kwa nambari. Kurudia alama chini _ kutasababisha hitilafu, lakini unaweza kuingiza nyingi upendavyo mradi tu usirudie tena.
_ underscore haiathiri nambari, kwa hivyo inaweza kutumika kama kitenganishi wakati kuna nambari nyingi. Kwa mfano, kuweka alama chini _ kila tarakimu nne ni rahisi kusoma.
print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True
bin_num = 0b1111_1111_1111
print(bin_num)
# 4095
Badilisha nambari ziwe mifuatano katika nukuu ya binary, octal, na heksadesimali.
Ili kubadilisha nambari kuwa mfuatano katika nukuu ya binary, oktali, au heksadesimali, tumia vitendakazi vifuatavyo vilivyojumuishwa.
- kitendakazi kilichojumuishwa (k.m. katika lugha ya programu)
bin()
,oct()
,hex()
- njia ya kamba
str.format()
, Kazi Zilizojengwaformat()
, mfuatano wa f
Sehemu hii pia inaeleza jinsi ya kupata mfuatano ulioonyeshwa katika umbizo kamilishano la mbili kwa thamani hasi.
bin(), oct(), hex() iliyojengewa ndani
Vipengele vifuatavyo vya kukokotoa vilivyojumuishwa vinaweza kubadilisha nambari kuwa mifuatano ya binary, octal, na hexadesimoli.
- Nambari ya binary:
bin()
- Octal:
oct()
- Nambari ya heksadesimali:
hex()
Kila moja hurejesha mfuatano wenye viambishi awali vifuatavyo
- Nambari ya binary:
0b
- Octal:
0o
- Nambari ya heksadesimali:
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'>
Ikiwa hauitaji kiambishi awali, tumia slice[2:] kutoa kamba nyuma yake, au tumia format() kama ilivyoelezewa ijayo.
print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff
Ikiwa unataka kuibadilisha kuwa kamba ya desimali, unaweza kutumia str().
print(str(i))
# 255
print(type(str(i)))
# <class 'str'>
Umbizo la kukokotoa lililojengewa ndani(), mbinu ya kamba str.format(), mfuatano wa f
Umbizo la kukokotoa lililojengewa ndani () na mbinu za mfuatano str.format() na f-string pia zinaweza kubadilisha nambari kuwa mifuatano ya binary, octal, na hexadecimal.
Kwa kubainisha hoja ya pili ya umbizo() kama ifuatavyo, inaweza kubadilishwa kuwa nyuzi za binary, octal, na hexadesimoli, mtawalia.
- Nambari ya binary:
b
- Octal:
o
- Nambari ya heksadesimali:
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'>
Iwapo unataka kupata mfuatano wenye kiambishi awali 0b,0o,0x, ongeza # kwenye mfuatano wa vipimo vya umbizo.
print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff
Pia inawezekana kujaza 0 na idadi yoyote ya tarakimu. Kumbuka kwamba idadi ya wahusika kwa kiambishi awali (herufi mbili) lazima pia izingatiwe wakati wa kujaza sifuri na kiambishi awali.
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
Njia ya kamba str.format() inaweza kutumika kwa uongofu pia.
print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff
Kuanzia na Python 3.6, unaweza pia kutumia kamba ya f.f'xxx'
print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff
Badilisha nambari hasi kuwa mfuatano katika umbizo kamilishano la wawili.
Nambari kamili hasi inapogeuzwa kuwa mfuatano wa binary au heksadesimali kwa kutumia bin() au umbizo(), thamani kamili itakuwa na ishara ya kutoa.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
Katika Python, shughuli kidogo kwenye nambari hasi pia hufanywa katika uwakilishi wa sehemu mbili. Kwa hivyo, ikiwa ungependa kupata mfuatano ulioonyeshwa katika umbo la kikamilisho la wawili, unaweza kuchukua kimantiki kidogo AU& na idadi ya juu zaidi ya tarakimu biti inayohitajika, kama ifuatavyo.
- 4bit:
0b1111(=0xf)
- 8bit:
0xff
- 16bit:
0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7
Badilisha mifuatano katika nukuu ya binary, octal, na heksadesimali kuwa nambari.
Kazi iliyojengwa ndani int()
Ili kubadilisha mfuatano katika nukuu ya binary, oktali, au heksadesimali kuwa nambari, tumia chaguo la kukokotoa lililojengewa ndani int().
Kwa int(kamba, radix), mfuatano katika nukuu ya binary, octal, heksadesimali, n.k. inaweza kubadilishwa kuwa int nambari kulingana na radix. Ikiwa radix imeachwa, nambari inachukuliwa kuwa 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'>
Ikiwa radix imewekwa kwa 0, ubadilishaji unafanywa kulingana na kiambishi cha kamba kifuatacho.
- Kiambishi awali cha binary:
0b
au0B
- Kiambishi awali cha Oktali:
0o
au0O
- Kiambishi awali cha heksadesimali:
0x
au0X
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
Ikiwa nambari ya msingi ni 0 na hakuna kiambishi awali, itabadilishwa kama nambari ya desimali, lakini kumbuka kuwa ikiwa mwanzo (upande wa kushoto) umejaa 0, hitilafu itatokea.
print(int('10', 0))
# 10
# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'
Katika hali nyingine, mifuatano iliyojazwa sifuri inaweza kubadilishwa kama ilivyo.
print(int('010'))
# 10
print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255
Ikiwa kamba haiwezi kubadilishwa na radix maalum au kiambishi awali, hitilafu hutokea.
# 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'
Mifano ya Maombi
Hesabu ya kamba ya binary
Kwa mfano, kufanya operesheni kwenye mfuatano katika nukuu ya binary na kiambishi awali 0b.
Unaweza kuibadilisha kwa urahisi kuwa nambari ya nambari (aina kamili int), fanya shughuli juu yake, na kisha uibadilishe kuwa safu ya kamba tena.
a = '0b1001'
b = '0b0011'
c = int(a, 0) + int(b, 0)
print(c)
print(bin(c))
# 12
# 0b1100
Badilisha kati ya nambari za binary, octal, na hexadesimoli
Pia ni rahisi kubadilisha nyuzi za binary, octal, na heksadesimali kwa kila mmoja. Mara baada ya kubadilishwa kuwa int ya nambari, inaweza kubadilishwa kuwa mfuatano wa umbizo lolote.
Kujaza sifuri, kiambishi awali, n.k. kunaweza kudhibitiwa na mfuatano wa vipimo vya umbizo.
a_0b = '0b1110001010011'
print(format(int(a, 0), '#010x'))
# 0x00000009
print(format(int(a, 0), '#010o'))
# 0o00000011