Python-da ikilik, səkkizlik və onaltılıq ədədləri və sətirləri bir-birinə və bir-birinə çevirin

Biznes

Python ikilik, səkkizlik və onaltılıq ədədlər, eləcə də adi onluq ədədlər kimi ədədləri və sətirləri idarə edə bilir. Onların arasında çevirmək də asandır.

Bu bölmədə aşağıdakı məzmunlar nümunə kodu ilə birlikdə izah ediləcəkdir.

  • Tam ədədləri ikilik, səkkizlik və onaltılıq sistemlərdə yazın.
  • Ədədləri ikilik, səkkizlik və onaltılıq sistemlərdə sətirlərə çevirin.
    • daxili funksiya (məsələn, proqramlaşdırma dilində)bin(),oct(),hex()
    • sim üsulustr.format(), Daxili funksiyalarformat(), f sətri
    • Mənfi tam ədədi ikinin tamamlayıcı formatında sətirə çevirin.
  • İkilik, səkkizlik və onaltılıq sistemlərdə sətirləri ədədlərə çevirin.
    • daxili funksiya (məsələn, proqramlaşdırma dilində)int()
  • Tətbiq nümunələri
    • İkili sətir arifmetikası
    • İkilik, səkkizlik və onaltılıq ədədlər arasında çevirmə

Tam ədədləri ikilik, səkkizlik və onaltılıq sistemlərdə yazın.

Aşağıdakı prefiksləri əlavə etməklə tam int ədədləri müvafiq olaraq ikilik, səkkizlik və onaltılıq sistemlərdə yazmaq olar.
Böyük hərflərdən də istifadə edə bilərsiniz.

  • İkili nömrə:0bvə ya0B
  • Səkkizlik:0ovə ya0O
  • Onaltılıq nömrə:0xvə ya0X

print() funksiyasının çıxışı ondalık qeydlə olacaq.

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

Hətta prefikslə belə, tip tam ədəddir 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'>

Tam ədəd olduğu üçün müntəzəm hesab əməliyyatları üçün istifadə edilə bilər.

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

Python 3.6-dan başlayaraq rəqəmlərə alt xətt _ əlavə etmək mümkündür. Alt xətt _ təkrarlanması xəta ilə nəticələnəcək, lakin təkrar etmədiyiniz müddətdə istədiyiniz qədər əlavə edə bilərsiniz.

_ alt xətt rəqəmə təsir etmir, ona görə də çoxlu rəqəmlər olduqda ayırıcı kimi istifadə edilə bilər. Məsələn, hər dörd rəqəmdən bir alt xətt _ daxil etmək asan oxunur.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Ədədləri ikilik, səkkizlik və onaltılıq sistemlərdə sətirlərə çevirin.

Ədədi ikilik, səkkizlik və ya onaltılıq notasiyada sətirə çevirmək üçün aşağıdakı daxili funksiyalardan istifadə edin.

  • daxili funksiya (məsələn, proqramlaşdırma dilində)bin(),oct(),hex()
  • sim üsulustr.format(), Daxili funksiyalarformat(), f sətri

Bu bölmə həm də mənfi dəyərlər üçün ikinin tamamlayıcı formatında ifadə olunan sətri necə əldə etməyi izah edir.

Daxili funksiyalar bin(), oct(), hex()

Aşağıdakı daxili funksiyalar ədədləri ikilik, səkkizlik və onaltılıq sətirlərə çevirə bilər.

  • İkili nömrə:bin()
  • Səkkizlik:oct()
  • Onaltılıq nömrə:hex()

Hər biri aşağıdakı prefikslərlə bir sətir qaytarır

  • İkili nömrə:0b
  • Səkkizlik:0o
  • Onaltılıq nömrə: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'>

Əgər prefiksə ehtiyacınız yoxdursa, onun arxasındakı sətri çıxarmaq üçün slice[2:] istifadə edin və ya aşağıda izah edildiyi kimi format() istifadə edin.

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

Onu onluq sətirə çevirmək istəyirsinizsə, str() funksiyasından istifadə edə bilərsiniz.

print(str(i))
# 255

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

Daxili funksiya formatı(), sətir metodu str.format(), f sətri

Daxili funksiya formatı() və str.format() və f-string metodları da ədədləri ikilik, səkkizlik və onaltılıq sətirlərə çevirə bilər.

Format()-ın ikinci arqumentini aşağıdakı kimi təyin etməklə, onu müvafiq olaraq ikilik, səkkizlik və onaltılıq sətirlərə çevirmək olar.

  • İkili nömrə:b
  • Səkkizlik:o
  • Onaltılıq nömrə: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'>

0b, 0o, 0x prefiksi olan sətir əldə etmək istəyirsinizsə, formatlaşdırma spesifikasiyası sətirinə # əlavə edin.

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

0-ı istənilən sayda rəqəmlə doldurmaq da mümkündür. Qeyd edək ki, prefikslə sıfırı doldurarkən prefiks üçün simvolların sayı (iki simvol) da nəzərə alınmalıdır.

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

Konversiya üçün str.format() sətir metodundan da istifadə etmək olar.

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

Python 3.6-dan başlayaraq siz f sətirindən də istifadə edə bilərsiniz.f'xxx'

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

Mənfi tam ədədi ikinin tamamlayıcı formatında sətirə çevirin.

Mənfi tam ədəd bin() və ya format() istifadə edərək ikili və ya onaltılıq sətirə çevrildikdə mütləq dəyər mənfi işarəyə malik olacaq.

x = -9

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

Python-da mənfi tam ədədlər üzərində bit istiqamətində əməliyyatlar ikinin tamamlayıcı təsvirində də yerinə yetirilir. Buna görə də, ikinin tamamlayıcı formasında ifadə edilmiş sətir əldə etmək istəyirsinizsə, bit məntiqi OR& aşağıdakı kimi tələb olunan maksimum bit rəqəmləri ilə.

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

İkilik, səkkizlik və onaltılıq sistemlərdə sətirləri ədədlərə çevirin.

Daxili funksiya int()

İkilik, səkkizlik və ya onaltılıq notasiyadakı sətri ədədə çevirmək üçün daxili funksiyadan istifadə edin int().

int(string, radix) ilə binar, səkkizlik, hexadecimal notationda olan str sətri və s. radiks əsasında rəqəmsal int-ə çevrilə bilər. Radiks buraxılıbsa, ədəd onluq hesab olunur.

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

Əgər radiks 0-a təyin edilibsə, çevrilmə aşağıdakı sətir prefiksi əsasında həyata keçirilir.

  • İkili prefiks:0bvə ya0B
  • Səkkizlik prefiks:0ovə ya0O
  • Onaltılıq prefiks:0xvə ya0X
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

Əsas nömrə 0-dırsa və prefiks yoxdursa, ondalıq rəqəmə çevriləcək, lakin qeyd edin ki, başlanğıc (sol tərəf) 0 ilə doldurulursa, xəta baş verəcəkdir.

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

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

Digər hallarda, sıfırla doldurulmuş sətirlər olduğu kimi çevrilə bilər.

print(int('010'))
# 10

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

Əgər sətir göstərilən radiks və ya prefikslə çevrilə bilmirsə, xəta baş verir.

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

Tətbiq nümunələri

İkili sətir arifmetikası

Məsələn, 0b prefiksi ilə ikili notasiyada sətir üzərində əməliyyatı yerinə yetirmək üçün.

Siz onu asanlıqla ədədi dəyərə (tam tip int) çevirə, üzərində əməliyyatlar yerinə yetirə və sonra yenidən str sətrinə çevirə bilərsiniz.

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

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

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

İkilik, səkkizlik və onaltılıq ədədlər arasında çevirmə

İkili, səkkizlik və onaltılıq sətirləri bir-birinə çevirmək də asandır. Rəqəmsal int-ə çevrildikdən sonra onu istənilən formatlı sətirə çevirmək olar.

Sıfır doldurma, prefiksləmə və s. formatlaşdırma spesifikasiyası sətri ilə idarə oluna bilər.

a_0b = '0b1110001010011'

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

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