قم بتحويل الأرقام والسلاسل الثنائية والثنائية والسداسية العشرية من وإلى بعضها البعض في Python

اعمال

يمكن لبايثون التعامل مع الأرقام والسلاسل كأرقام ثنائية وثمانية وسداسية عشرية بالإضافة إلى الأرقام العشرية المعتادة. من السهل أيضًا التحويل بينهما.

في هذا القسم ، سيتم شرح المحتويات التالية مع نموذج التعليمات البرمجية.

  • اكتب الأعداد الصحيحة في ثنائي وثماني وست عشري.
  • تحويل الأرقام إلى سلاسل في تدوين ثنائي وثماني وسداسي عشري.
    • وظيفة مدمجة (على سبيل المثال في لغة البرمجة)bin()وoct()وhex()
    • طريقة السلسلةstr.format()، وظائف مدمجةformat()، و سلسلة
    • تحويل عدد صحيح سالب إلى سلسلة في تنسيق اثنين مكمل.
  • تحويل السلاسل في تدوين ثنائي وثماني وست عشري إلى أرقام.
    • وظيفة مدمجة (على سبيل المثال في لغة البرمجة)int()
  • أمثلة التطبيق
    • سلسلة حسابية ثنائية
    • التحويل بين الأعداد الثنائية والثمانية والسداسية العشرية

اكتب الأعداد الصحيحة في ثنائي وثماني وست عشري.

بإضافة البادئات التالية ، يمكن كتابة الأعداد الصحيحة int بالثنائي ، والثماني ، والست عشري ، على التوالي.
يمكنك أيضًا استخدام الأحرف الكبيرة.

  • عدد ثنائي:0bأو0B
  • ثماني:0oأو0O
  • رقم سداسي عشري:0xأو0X

سيكون إخراج print () بالتدوين العشري.

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

حتى مع البادئة ، النوع هو عدد صحيح 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'>

نظرًا لأنه نوع عدد صحيح ، يمكن استخدامه لعمليات حسابية منتظمة.

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

بدءًا من Python 3.6 ، من الممكن إدراج الشرطة السفلية _ في الأرقام. سيؤدي تكرار شرطة سفلية _ إلى حدوث خطأ ، ولكن يمكنك إدخال أكبر عدد تريده طالما أنك لا تكرره.

لا تؤثر الشرطة السفلية _ على الرقم ، لذا يمكن استخدامها كفاصل عندما يكون هناك العديد من الأرقام. على سبيل المثال ، من السهل قراءة إدخال شرطة سفلية _ كل أربعة أرقام.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

تحويل الأرقام إلى سلاسل في تدوين ثنائي وثماني وسداسي عشري.

لتحويل رقم إلى سلسلة بتدوين ثنائي أو ثماني أو سداسي عشري ، استخدم الدالات المضمنة التالية.

  • وظيفة مدمجة (على سبيل المثال في لغة البرمجة)bin()وoct()وhex()
  • طريقة السلسلةstr.format()، وظائف مدمجةformat()، و سلسلة

يوضح هذا القسم أيضًا كيفية الحصول على سلسلة يتم التعبير عنها بتنسيق اثنين من القيم السالبة.

حاوية وظائف مدمجة () ، oct () ، ست عشري ()

يمكن للدوال المضمنة التالية تحويل الأرقام إلى سلاسل ثنائية وثنائية وسداسية عشرية.

  • عدد ثنائي:bin()
  • ثماني:oct()
  • رقم سداسي عشري:hex()

كل إرجاع سلسلة مع البادئات التالية

  • عدد ثنائي:0b
  • ثماني:0o
  • رقم سداسي عشري: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'>

إذا لم تكن بحاجة إلى البادئة ، فاستخدم الشريحة [2:] لاستخراج السلسلة الموجودة خلفها ، أو استخدم التنسيق () كما هو موضح لاحقًا.

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

إذا كنت تريد تحويلها إلى سلسلة عشرية ، يمكنك استخدام str ().

print(str(i))
# 255

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

تنسيق وظيفة مضمّن () ، أسلوب السلسلة str.format () ، سلسلة f

يمكن لتنسيق الوظيفة المضمنة () وطرق السلسلة str.format () و f-string تحويل الأرقام إلى سلاسل ثنائية وثنائية وسداسية عشرية.

بتحديد الوسيطة الثانية للصيغة () على النحو التالي ، يمكن تحويلها إلى سلاسل ثنائية وثنائية وسداسية عشرية ، على التوالي.

  • عدد ثنائي:b
  • ثماني:o
  • رقم سداسي عشري: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 ، 0 x ، أضف # إلى سلسلة مواصفات التنسيق.

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

من الممكن أيضًا ملء 0 بأي عدد من الأرقام. لاحظ أنه يجب أيضًا مراعاة عدد أحرف البادئة (حرفان) عند ملء الصفر ببادئة.

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

يمكن استخدام طريقة السلسلة str.format () للتحويل أيضًا.

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

بدءًا من Python 3.6 ، يمكنك أيضًا استخدام سلسلة f.f'xxx'

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

تحويل عدد صحيح سالب إلى سلسلة في تنسيق اثنين مكمل.

عندما يتم تحويل عدد صحيح سالب إلى سلسلة ثنائية أو سداسية عشرية باستخدام bin () أو تنسيق () ، فإن القيمة المطلقة سيكون لها علامة الطرح.

x = -9

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

في بايثون ، يتم أيضًا تنفيذ عمليات البت على الأعداد الصحيحة السالبة في التمثيل التكميلي للاثنين. لذلك ، إذا كنت ترغب في الحصول على سلسلة يتم التعبير عنها في شكل مكملين اثنين ، فيمكنك استخدام OR & amp؛ مع الحد الأقصى لعدد أرقام البت المطلوبة ، على النحو التالي.

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

تحويل السلاسل في تدوين ثنائي وثماني وست عشري إلى أرقام.

المدمج في دالة int ()

لتحويل سلسلة بتدوين ثنائي أو ثماني أو سداسي عشري إلى رقم ، استخدم الدالة المضمنة int ().

باستخدام int (سلسلة ، جذر) ، يمكن تحويل سلسلة سلسلة في تدوين ثنائي وثماني وسداسي عشري وما إلى ذلك إلى int عددية استنادًا إلى الجذر. إذا تم حذف الجذر ، فسيتم اعتبار الرقم عشريًا.

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

إذا تم ضبط الجذر على 0 ، فسيتم التحويل بناءً على بادئة السلسلة التالية.

  • بادئة ثنائية:0bأو0B
  • بادئة ثماني:0oأو0O
  • بادئة سداسية عشرية:0xأو0X
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

إذا كان الرقم الأساسي هو 0 ولا توجد بادئة ، فسيتم تحويله كرقم عشري ، ولكن لاحظ أنه إذا تم ملء البداية (الجانب الأيسر) بـ 0 ، فسيحدث خطأ.

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

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

في حالات أخرى ، يمكن تحويل السلاسل المعبأة بصفر كما هي.

print(int('010'))
# 10

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

إذا تعذر تحويل السلسلة مع الأصل المحدد أو البادئة ، فسيحدث خطأ.

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

أمثلة التطبيق

سلسلة حسابية ثنائية

على سبيل المثال ، لإجراء عملية على سلسلة بترميز ثنائي بالبادئة 0b.

يمكنك بسهولة تحويلها إلى قيمة عددية (نوع عدد صحيح int) ، وإجراء عمليات عليها ، ثم تحويلها مرة أخرى إلى سلسلة سلسلة مرة أخرى.

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

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

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

التحويل بين الأعداد الثنائية والثمانية والسداسية العشرية

من السهل أيضًا تحويل السلاسل الثنائية والثنائية والسداسية العشرية إلى بعضها البعض. بمجرد تحويلها إلى عدد صحيح ، يمكن تحويلها إلى سلسلة بأي تنسيق.

يمكن التحكم في التعبئة الصفرية ، والبادئة ، وما إلى ذلك من خلال سلسلة مواصفات التنسيق.

a_0b = '0b1110001010011'

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

print(format(int(a, 0), '#010o'))
# 0o00000011