2010-08-20 362 views
88

Có bất kỳ mô đun hoặc hàm nào trong python mà tôi có thể sử dụng để chuyển đổi số thập phân sang số nhị phân tương đương không? Tôi có thể chuyển đổi nhị phân sang thập phân bằng cách sử dụng int ('[binary_value]', 2), do đó, bất kỳ cách nào để làm ngược lại mà không cần viết mã để làm điều đó bản thân mình?Chuyển đổi số thập phân sang nhị phân trong python

+9

Cả chữ "thập phân" lẫn "nhị phân" đều không có nghĩa là ý của bạn. –

Trả lời

159

tất cả các số được lưu trữ dưới dạng nhị phân. nếu bạn muốn có một đại diện văn bản của một số được đưa ra trong nhị phân, sử dụng bin(i)

>>> bin(10) 
'0b1010' 
>>> 0b1010 
10 
58
"{0:#b}".format(my_int) 
+27

Đây là định dạng để in với số 0 đứng đầu: '{{: 08b}". Định dạng (my_int) ' –

5

Tôi đồng ý với câu trả lời @ aaronasterling của. Tuy nhiên, nếu bạn muốn có một chuỗi phi nhị phân mà bạn có thể đúc thành một int, sau đó bạn có thể sử dụng các thuật toán kinh điển:

def decToBin(n): 
    if n==0: return '' 
    else: 
     return decToBin(n/2) + str(n%2) 
+0

' int (bin (10), 2) 'sản lượng' 10'. 'int (decToBin (10))' mang lại '101' và' int (decToBin (10), 2) 'lợi nhuận 5. Ngoài ra, giới hạn đệ quy của hàm hit với' từ __future__ bộ phận nhập khẩu' hoặc python 3 – aaronasterling

+3

@aaron, điểm sau có thể được giải quyết bằng cách chuyển sang '//' (phân chia cắt ngắn); trước đây, bằng cách chuyển đổi thứ tự của hai chuỗi được tổng kết trong 'return'. Không phải đệ quy đó có ý nghĩa gì ở đây ('bin (n) [2:]' - hay vòng lặp 'while' nếu bạn bị mắc kẹt trên một số phiên bản cũ của Python - sẽ là _much_ tốt hơn!). –

+1

Điều này thật tuyệt vời! nó có thể đi với ** lambda ** cách quá:] 'nhị phân = lambda n:' 'nếu n == 0 nhị phân khác (n/2) + str (n% 2) ' –

20
def dec_to_bin(x): 
    return int(bin(x)[2:]) 

Thật dễ dàng.

+12

** - 1 ** - don ' t trả về một int. Ngoài ra, 'dec_to_bin (-1)' cho 'ValueError: chữ không hợp lệ cho int() với base 10: 'b1'' – Eric

+1

bạn có thể giải thích rằng [2:]? –

+1

Thử 'bin (2)'. Bạn không nhận được '10'. Bạn nhận được '0b10'. Cùng hố có thể với 'hex (2)' ('0x2'). Vì vậy, bạn muốn tất cả trừ hai ký tự đầu tiên. Vì vậy, bạn lấy một lát bắt đầu sau hai ký tự đầu tiên. – leewz

9

Bạn cũng có thể sử dụng một hàm từ module NumPy

from numpy import binary_repr 

mà cũng có thể xử lý các số không hàng đầu:

Definition:  binary_repr(num, width=None) 
Docstring: 
    Return the binary representation of the input number as a string. 

    This is equivalent to using base_repr with base 2, but about 25x 
    faster. 

    For negative numbers, if width is not given, a - sign is added to the 
    front. If width is given, the two's complement of the number is 
    returned, with respect to that width. 
2
n=int(input('please enter the no. in decimal format: ')) 
x=n 
k=[] 
while (n>0): 
    a=int(float(n%2)) 
    k.append(a) 
    n=(n-a)/2 
k.append(0) 
string="" 
for j in k[::-1]: 
    string=string+str(j) 
print('The binary no. for %d is %s'%(x, string)) 
32

Nếu không có sự 0b trước:

"{0:b}".format(int) 

Bắt đầu với Python 3.6 bạn cũng có thể sử dụng formatted string literal or f-string, --- PEP:

f"{int:b}" 
+0

Tôi nhận được lỗi sau: 'TypeError: chuỗi định dạng không trống được chuyển đến đối tượng .__ format__' –

1

Đối với mục đích hoàn chỉnh: nếu bạn muốn chuyển đổi đại diện điểm cố định để tương đương nhị phân của nó bạn có thể thực hiện các hoạt động sau đây:

  1. Lấy số nguyên và phần phân đoạn.

    from decimal import * 
    a = Decimal(3.625) 
    a_split = (int(a//1),a%1) 
    
  2. Chuyển đổi phần phân số trong biểu diễn nhị phân của nó. Để đạt được điều này nhân liên tiếp bằng 2.

    fr = a_split[1] 
    str(int(fr*2)) + str(int(2*(fr*2)%1)) + ... 
    

Bạn có thể đọc lời giải thích here.

Các vấn đề liên quan