คุณจะแสดงตัวอักษรไบนารีใน Python อย่างไร
พวกเขาไม่ใช่ตัวอักษร "ไบนารี" แต่เป็น "ตัวอักษรจำนวนเต็ม" คุณสามารถแสดงตัวอักษรจำนวนเต็มด้วยรูปแบบไบนารี0
ตามด้วยB
หรือb
ตามด้วยชุดของศูนย์และคนเช่น:
>>> 0b0010101010
170
>>> 0B010101
21
จาก Python 3 docsนี่เป็นวิธีการจัดหาตัวอักษรจำนวนเต็มใน 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
เป็นฐานมันจะถือว่าฐาน 10 หากสตริงไม่ได้ระบุด้วยคำนำหน้า:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
การแปลงจาก int กลับเป็นไบนารีที่มนุษย์สามารถอ่านได้:
คุณสามารถส่งจำนวนเต็มไปยังถังขยะเพื่อดูการแทนค่าสตริงของตัวอักษรไบนารี:
>>> 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'