เพื่อที่จะแปลงจำนวนเต็มเป็นเลขฐานสองฉันได้ใช้รหัสนี้:
>>> bin(6)
'0b110'
และเมื่อใดที่จะลบ '0b' ฉันจะใช้สิ่งนี้:
>>> bin(6)[2:]
'110'
ฉันจะทำอย่างไรถ้าฉันต้องการแสดง6
เป็น00000110
แทนที่จะเป็น110
?
เพื่อที่จะแปลงจำนวนเต็มเป็นเลขฐานสองฉันได้ใช้รหัสนี้:
>>> bin(6)
'0b110'
และเมื่อใดที่จะลบ '0b' ฉันจะใช้สิ่งนี้:
>>> bin(6)[2:]
'110'
ฉันจะทำอย่างไรถ้าฉันต้องการแสดง6
เป็น00000110
แทนที่จะเป็น110
?
คำตอบ:
>>> '{0:08b}'.format(6)
'00000110'
เพียงอธิบายส่วนต่างๆของสตริงการจัดรูปแบบ:
{}
วางตัวแปรลงในสตริง0
รับตัวแปรที่ตำแหน่งอาร์กิวเมนต์ 0:
เพิ่มตัวเลือกการจัดรูปแบบสำหรับตัวแปรนี้ (มิฉะนั้นจะเป็นตัวแทนทศนิยม6
)08
จัดรูปแบบตัวเลขแปดหลัก zero-padded ด้านซ้ายb
แปลงตัวเลขเป็นการแทนเลขฐานสองหากคุณใช้ Python 3.6 หรือสูงกว่าคุณสามารถใช้ f-strings:
>>> f'{6:08b}'
'00000110'
0
หมายถึงอาร์กิวเมนต์0th
format
หลังจากเครื่องหมายจุดคู่เป็นการจัดรูปแบบที่สอง0
หมายถึงศูนย์เติม 8 ช่องว่างและb
สำหรับไบนารี
format()
ฟังก์ชัน : format(6, '08b')
; ฟังก์ชั่นใช้ค่า (สิ่งที่{..}
ช่องใช้กับ) และข้อกำหนดการจัดรูปแบบ (สิ่งที่คุณจะใส่หลังจาก:
ในสตริงการจัดรูปแบบ)
แค่ความคิดอื่น:
>>> bin(6)[2:].zfill(8)
'00000110'
วิธีที่สั้นกว่าผ่านการแก้ไขสตริง ( Python 3.6+ ):
>>> f'{6:08b}'
'00000110'
bin(-6)[2:].zfill(8)
อ่านเป็น'0000b110'
วิธีการ twiddling บิต ...
>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'
>>> bin8(-3)
'11111101'
x
ไปทางขวาและ ANDs ด้วย1
โดยแยกหนึ่งบิต (0 หรือ 1) ในแต่ละครั้ง
เพียงใช้ฟังก์ชั่นการจัดรูปแบบ
format(6, "08b")
รูปแบบทั่วไปคือ
format(<the_integer>, "<0><width_of_string><format_specifier>")
1000000 loops, best of 3: 556 ns per loop
คำตอบของ eumiro นั้นดีกว่า แต่ฉันแค่โพสต์สิ่งนี้เพื่อความหลากหลาย:
>>> "%08d" % int(bin(6)[2:])
00000110
'%08x' % int(bin(6)[2:], 16)
.. หรือหากคุณไม่แน่ใจว่าควรเป็น 8 หลักเสมอคุณสามารถส่งเป็นพารามิเตอร์ได้:
>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'
numpy.binary_repr(num, width=None)
มีอาร์กิวเมนต์ความกว้างเวทย์มนตร์ตัวอย่างที่เกี่ยวข้องจากเอกสารที่ลิงก์ด้านบน:
>>> np.binary_repr(3, width=4) '0011'
ส่วนประกอบทั้งสองจะถูกส่งกลับเมื่อหมายเลขอินพุตเป็นลบและระบุความกว้าง:
>>> np.binary_repr(-3, width=5) '11101'
การไปโรงเรียนเก่าจะได้ผลเสมอ
def intoBinary(number):
binarynumber=""
if (number!=0):
while (number>=1):
if (number %2==0):
binarynumber=binarynumber+"0"
number=number/2
else:
binarynumber=binarynumber+"1"
number=(number-1)/2
else:
binarynumber="0"
return "".join(reversed(binarynumber))
number=number/2
ให้ลอยดังนั้นnumber=number//2
ตะเข็บที่ดีกว่าผมก็จะเข้ามาแทนที่number=number//2
ด้วยnumber//=2
และb=b+"0"
ด้วยb+="0"
('0' * 7 + bin(6)[2:])[-8:]
หรือ
right_side = bin(6)[2:]
'0' * ( 8 - len( right_side )) + right_side
สมมติว่าคุณต้องการแยกจำนวนตัวเลขที่ใช้เพื่อแทนค่าจากตัวแปรซึ่งไม่คงที่เสมอไปวิธีที่ดีคือการใช้ numpy.binary
อาจมีประโยชน์เมื่อคุณใช้ไบนารีกับชุดพลังงาน
import numpy as np
np.binary_repr(6, width=8)
วิธีที่ดีที่สุดคือการระบุรูปแบบ
format(a, 'b')
ส่งคืนค่าไบนารีของรูปแบบสตริง
ในการแปลงสตริงไบนารีกลับไปเป็นจำนวนเต็มให้ใช้ฟังก์ชัน int ()
int('110', 2)
ส่งคืนค่าจำนวนเต็มของสตริงไบนารี
def int_to_bin(num, fill):
bin_result = ''
def int_to_binary(number):
nonlocal bin_result
if number > 1:
int_to_binary(number // 2)
bin_result = bin_result + str(number % 2)
int_to_binary(num)
return bin_result.zfill(fill)