يمكن لبايثون التعامل مع الأرقام والسلاسل كأرقام ثنائية وثمانية وسداسية عشرية بالإضافة إلى الأرقام العشرية المعتادة. من السهل أيضًا التحويل بينهما.
في هذا القسم ، سيتم شرح المحتويات التالية مع نموذج التعليمات البرمجية.
- اكتب الأعداد الصحيحة في ثنائي وثماني وست عشري.
- تحويل الأرقام إلى سلاسل في تدوين ثنائي وثماني وسداسي عشري.
- وظيفة مدمجة (على سبيل المثال في لغة البرمجة)
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
- 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'>
إذا لم تكن بحاجة إلى البادئة ، فاستخدم الشريحة [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