2009-10-06 94 views
48

Làm cách nào để thêm, trừ và so sánh các số nhị phân trong Python mà không chuyển đổi sang thập phân?Số nhị phân trong Python

+1

đây có phải là một câu hỏi bài tập về nhà, tức là các người hỏi làm thế nào để làm toán ở mức thấp? Xem (http://stackoverflow.com/questions/1149929/how-to-add-two-numbers-without-using-or-or-another-arithmetic-operator/1150996#1150996) –

+1

Bạn có thể đưa ra một số ví dụ về bạn đang cố gắng đạt được? –

+6

số đã được nhị phân trong python. Chúng được chuyển đổi thành nhị phân khi chương trình của bạn bắt đầu và chỉ được chuyển đổi về số thập phân khi bạn sử dụng một cái gì đó như str() hoặc in –

Trả lời

88

Bạn có thể chuyển đổi giữa một chuỗi đại diện của nhị phân sử dụng bin() và int()

>>> bin(88) 
'0b1011000' 
>>> int('0b1011000', 2) 
88 
>>> 

>>> a=int('01100000', 2) 
>>> b=int('00100110', 2) 
>>> bin(a & b) 
'0b100000' 
>>> bin(a | b) 
'0b1100110' 
>>> bin(a^b) 
'0b1000110' 
+0

Cảm ơn bạn. Vâng, đây là bài tập về nhà. Bài tập nói rằng tôi phải để lại các số trong 'định dạng nhị phân' khi thực hiện ._add, ._sub, ._gt, ._lt và ._eq. Ví dụ của bạn ở trên dường như chuyển đổi từ bin sang int. Tôi không chắc chắn nếu điều này sẽ được chấp nhận nhưng tôi không thấy bất kỳ cách nào khác nó có thể được ngoại trừ ví dụ của bạn. –

+6

Bạn cũng có thể sử dụng chữ nhị phân, khi sử dụng Python 2.6 trở lên. Thay vì 'int ('01100111', 2)' bạn viết '0b01100111' chẳng hạn, là' 103'. – Joschua

3

Nhị phân, thập phân, thập lục phân ... cơ sở chỉ quan trọng khi đọc hoặc xuất số, thêm số nhị phân chỉ giống như thêm số thập phân: nó chỉ là vấn đề đại diện.

9

Tôi nghĩ bạn đang nhầm lẫn về nhị phân là gì. Nhị phân và số thập phân chỉ là các biểu diễn khác nhau của một số - ví dụ: 101 cơ sở 2 và 5 cơ số 10 là cùng một số. Các phép toán cộng, trừ, và so sánh hoạt động với các số - 101 cơ sở 2 == 5 cơ sở 10 và phép cộng là cùng một phép toán hợp lý bất kể cơ sở bạn đang làm việc. Thực tế là trình thông dịch trăn của bạn có thể lưu trữ những thứ như nhị phân trong nội bộ. không ảnh hưởng đến cách bạn làm việc với nó - nếu bạn có loại số nguyên, chỉ cần sử dụng +, -, v.v.

Nếu bạn có chuỗi chữ số nhị phân, bạn sẽ phải tự thực hiện hoặc chuyển đổi chúng bằng Hàm int (binaryString, 2).

7

Nếu bạn đang nói về toán tử Bitwise, sau đó bạn đang sau:

~ Not 
^ XOR 
| Or 
& And 

Nếu không, số nhị phân làm việc chính xác giống như số thập phân, bởi vì con số này là con số, không có vấn đề làm thế nào bạn nhìn vào họ . Sự khác biệt duy nhất giữa số thập phân và nhị phân là cách chúng tôi trình bày dữ liệu đó khi chúng tôi xem xét dữ liệu đó.

+0

Luôn vui vẻ để viết thêm, phụ vv với các toán tử bitwise. Đối với bất cứ ai quan tâm đến điều này, hãy tìm hướng dẫn trên các mạch, cụ thể hơn một nửa người bổ sung, sau đó đầy đủ adders và sau đó cuối cùng trừ, thậm chí có thể là một adder-substractor. Từ đây bạn có thể dịch nó thành các toán tử bitwise. –

-4

Tôi nghĩ bạn đang nhầm lẫn về những gì nhị phân là. Nhị phân và số thập phân chỉ là các biểu diễn khác nhau của một số - ví dụ: 101 cơ sở 2 và 5 cơ số 10 là cùng một số. Các hoạt động cộng, trừ, và so sánh hoạt động trên các số - 101 cơ số 2 == 5 cơ sở 10 và bổ sung là hoạt động logic giống nhau bất kể cơ sở nào bạn đang làm việc.

-1

Không chắc chắn, nhưng tôi bỏ giải pháp ở đây:

class Solution: 
    # @param A : string 
    # @param B : string 
    # @return a strings 
    def addBinary(self, A, B): 
     num1 = bin(int(A, 2)) 
     num2 = bin(int(B, 2)) 
     bin_str = bin(int(num1, 2)+int(num2, 2)) 
     b_index = bin_str.index('b') 
     return bin_str[b_index+1:] 

s = Solution() 
print(s.addBinary("11", "100")) 
0

Dưới đây là viết lại của một hàm được đăng trước đây:

def addBinary(a, b): # Example: a = '11' + b =' 100' returns as '111'.  
    for ch in a: assert ch in {'0','1'}, 'bad digit: ' + ch  
    for ch in b: assert ch in {'0','1'}, 'bad digit: ' + ch  
    sumx = int(a, 2) + int(b, 2)  
    return bin(sumx)[2:] 
Các vấn đề liên quan