Badilisha nambari za binary, octal, na heksadesimali na kamba kwenda na kutoka kwa kila mmoja katika Python

Biashara

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 kambastr.format(), Kazi Zilizojengwaformat(), mfuatano wa f
    • Badilisha nambari hasi kuwa mfuatano katika umbizo kamilishano la wawili.
  • Badilisha mifuatano katika nukuu ya binary, octal, na heksadesimali kuwa nambari.
    • kitendakazi kilichojumuishwa (k.m. katika lugha ya programu)int()
  • 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:0bau0B
  • Octal:0oau0O
  • Nambari ya heksadesimali:0xau0X

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 kambastr.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
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:0bau0B
  • Kiambishi awali cha Oktali:0oau0O
  • Kiambishi awali cha heksadesimali:0xau0X
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
Copied title and URL