2015-07-01 114 views
10

爲了測試使用更基本的構建塊(使用Nand,Or和And)構建Xor操作,我需要能夠執行Not操作。內置的not似乎只用一個位來完成。如果我做的:如何在Python中執行非操作?

x = 0b1100 
x = not x 

我應該得到0b0011而是我剛剛得到0b0。我究竟做錯了什麼?或者Python只是缺少這個基本功能?

我知道Python有一個內置的Xor函數,但我一直在使用Python來測試HDL項目/課程的東西,我需要構建一個Xor門。我想用Python來測試它,但是我不能沒有相當於Not的門。

+0

你需要觀察出。不是不是一個按位運算符。這些是明智的運營商(他們實際上映射到門):https://wiki.python.org/moin/BitwiseOperators – rady

回答

13

在使用Python ~的問題是,它的工作原理與符號整數。這也是真正有意義的唯一方法,除非您將自己限制在特定的位數。它與按位數學一起工作,但它可以很難解釋中間結果。

對於4位的邏輯,你應該只從0b1111

0b1111 - 0b1100 # == 0b0011 

減爲8位邏輯,從0b11111111

減去的一般形式是

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

謝謝!如果Python允許未簽名的數字,那將是非常好的,但這將是一個巨大的改變,所以這是有效的。 :) – Lauren

4

試試這個,這就是所謂的按位補operator

~0b1100