2015-07-01 14 views
10

Để kiểm tra việc xây dựng một hoạt động Xor với các khối xây dựng cơ bản hơn (sử dụng Nand, Or, và And trong trường hợp của tôi), tôi cần có khả năng thực hiện thao tác Không. Việc xây dựng trong not chỉ có vẻ như làm điều này với các bit duy nhất. Nếu tôi làm:Làm cách nào để thực hiện thao tác bit không hoạt động trong Python?

x = 0b1100 
x = not x 

tôi sẽ nhận được 0b0011 nhưng thay vào đó tôi chỉ nhận được 0b0. Tôi đang làm gì sai? Hoặc là Python chỉ thiếu chức năng cơ bản này?

Tôi biết rằng Python có chức năng built-in Xor nhưng tôi đã sử dụng Python để kiểm tra việc cho một dự án HDL/khóa học mà tôi cần phải xây dựng một cổng XOR. Tôi muốn thử nghiệm điều này trong Python nhưng tôi không thể không có tương đương với một cổng không.

+0

Bạn cần phải xem ngoài. không phải là một nhà điều hành bitwise. Đây là những nhà khai thác khôn ngoan (họ thực sự lập bản đồ cho các cổng): https://wiki.python.org/moin/BitwiseOperators – rady

Trả lời

13

Vấn đề với việc sử dụng ~ bằng Python, là nó hoạt động với số nguyên ký kết. Đây cũng là cách duy nhất thực sự có ý nghĩa trừ khi bạn giới hạn bản thân với một số bit cụ thể. Nó sẽ hoạt động ok với phép toán bitwise, nhưng nó có thể làm cho nó khó để giải thích các kết quả trung gian.

Đối với 4 bit logic, bạn chỉ nên trừ từ 0b1111

0b1111 - 0b1100 # == 0b0011 

Đối với 8 bit logic, trừ từ 0b11111111, vv

Hình thức chung là

def bit_not(n, numbits=8): 
    return (1 << numbits) - 1 - n 
+0

Cảm ơn! Nó sẽ được tốt đẹp nếu Python cho phép số unsigned, nhưng đó sẽ là một thay đổi rất lớn, do đó, công trình này. :) – Lauren

4

Hãy thử điều này, nó được gọi là các phép toán bổ sung operator:

~0b1100 
Các vấn đề liên quan