python - مكتبة - كيف تعبر عن القيم الحرفية الثنائية في بيثون؟




مكتبة اكواد بايثون (4)

كيف تعبر عن القيم الحرفية الثنائية في بيثون؟

إنها ليست حرفية "ثنائية" ، بل "حرفية صحيحة". يمكنك التعبير عن عدد صحيح حرفي بتنسيق ثنائي مع 0 متبوعًا B أو b متبوعًا بسلسلة من الأصفار والأخرى ، على سبيل المثال:

>>> 0b0010101010
170
>>> 0B010101
21

من docs Python 3 ، هذه هي طرق توفير حرفية صحيحة في Python:

يتم وصف القيم الحرفية الصحيحة بالتعاريف المعجمية التالية:

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

لا يوجد حد لطول عدد صحيح حرفي بصرف النظر عما يمكن تخزينه في الذاكرة المتوفرة.

لاحظ أن الأصفار البادئة في عدد عشري غير صفري غير مسموح بها. هذا لغرض الإبهام بالحرف الثمانية ذات النمط C ، والتي استخدمها Python قبل الإصدار 3.0.

بعض الأمثلة على الأرقام الصحيحة:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

تم التغيير في الإصدار 3.6: يُسمح الآن بتسطير أسفل السطر لأغراض التجميع بالأرقام الحرفية.

طرق أخرى للتعبير عن ثنائي:

يمكنك الحصول على الأصفار والأخرى الموجودة في كائن سلسلة والتي يمكن معالجتها (على الرغم من أنه يجب عليك فقط إجراء عمليات bitwise على عدد صحيح في معظم الحالات) - فقط قم بتمرير سلسلة الأصفار والأخرى والقاعدة التي تقوم بتحويلها من (2 ):

>>> int('010101', 2)
21

يمكنك اختياريا بادئة 0b أو 0B :

>>> int('0b0010101010', 2)
170

إذا قمت بتمريرها 0 كقاعدة ، فسوف تفترض base 10 إذا لم تحدد السلسلة بالبادئة:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

التحويل من int إلى القراءة الثنائية البشرية:

يمكنك تمرير عدد صحيح إلى bin لرؤية تمثيل سلسلة الحرفي الثنائي:

>>> bin(21)
'0b10101'

ويمكنك الجمع بين bin و int للذهاب ذهابًا وإيابًا:

>>> bin(int('010101', 2))
'0b10101'

يمكنك استخدام مواصفات التنسيق أيضًا ، إذا كنت تريد أن يكون الحد الأدنى للعرض مع الأصفار السابقة:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'

كيف يمكنك التعبير عن عدد صحيح كرقم ثنائي مع بيثون الحرفية؟

تمكنت بسهولة من العثور على إجابة hex:

>>> 0x12AF
4783
>>> 0x100
256

و ثماني:

>>> 01267
695
>>> 0100
64

كيف تستخدم الحرفيين للتعبير عن ثنائي في بايثون؟

ملخص الإجابات

  • Python 2.5 والإصدارات الأقدم: يمكن التعبير عن ثنائي باستخدام int('01010101111',2) ولكن ليس بحرف.
  • Python 2.5 والإصدارات الأقدم: لا توجد طريقة للتعبير عن القيم الحرفية الثنائية.
  • Python 2.6 beta: يمكنك القيام بذلك مثل: 0b1100111 أو 0B1100111 .
  • Python 2.6 beta: سيسمح أيضًا 0o27 أو 0O27 (الحرف الثاني هو الحرف O) بتمثيل ثماني.
  • الإصدار التجريبي 3.0 من Python: مماثل لـ 2.6 ، ولكن لن يسمح بعد الآن باستخدام بناء الجملة الأقدم 027 للأوكال.

أنا متأكد من أن هذا أحد الأشياء بسبب التغيير في Python 3.0 مع ربما bin () للذهاب مع hex () و oct ().

تحرير: إجابة lbrandy صحيحة في جميع الحالات.


تحدد 0 في البداية هنا أن القاعدة هي 8 (وليس 10) ، وهو أمر يسهل رؤيته:

>>> int('010101', 0)
4161

إذا لم تبدأ بالرقم 0 ، فإن python يفترض أن الرقم هو الأساس 10.

>>> int('10101', 0)
10101

للإشارة - احتمالات بايثون المستقبلية :
بدءًا من Python 2.6 ، يمكنك التعبير عن القيم الحرفية الثنائية باستخدام البادئة 0b أو 0B :

>>> 0b101111
47

يمكنك أيضًا استخدام دالة bin الجديدة للحصول على تمثيل ثنائي لرقم:

>>> bin(173)
'0b10101101'

إصدار تطوير الوثائق: ما الجديد في بيثون 2.6







literals