2015-01-17 105 views
0

在C中,假設我有一個無符號字符A,它可以是0或1. 我想找到一個按位邏輯運算符,將 A轉換爲!A 。按位運算符將0轉換爲1並將1轉換爲0

注意:我在GPU上使用此代碼,與邏輯運算符相比,按位運算符非常便宜。即XOR比!便宜得多!

+1

什麼語言? C? – GrahamS

+1

你是什麼意思與「!A」?這沒有任何意義,沒有一個角色的倒置。 – specializt

回答

7

如果不是'你的意思是發送1到0和0到1.你可以使用異或運算符^來做到這一點。如果字符被稱爲c,則可以編寫c = c^1;

+1

另外,如果我把一個真正的布爾表達式當作一個char,那個char是否等於1?即char test =(A == 1);在這種情況下,測試是否等於1? – Jacko

+0

@Jacko是的。另外,你應該從另一個答案中使用'A =!A;'。 'c = c^1'只會反轉字符的第一位,我想你爲什麼需要這樣做。 – HolyBlackCat

+0

謝謝,HolyBlackCat。但是,如果c == 0,那麼c^1將等於1.如果c == 1,那麼c^1將等於0.所以這就是我正在尋找的。 – Jacko

4

您應該使用「邏輯非」運算符:

A = !A;

您還可以使用「按位非」操作,但是這樣會讓你的代碼更難理解,因爲你在做什麼,實際上是邏輯不是:

A = ~A;

+1

我已經中和了downvote;我認爲你的回答很直觀! – Poriferous

+2

'A =!A'是最清晰的IMO。 – ormaaj

+0

謝謝。我試圖避免邏輯運算符。我已經添加了這個問題。 – Jacko

1

XOR分配與1是方便的,如果你只需要一個標誌來反覆切換。

$ clang -x c -include stdio.h -pipe -o meh - <<\EOF && ./meh 
int main(int argc, char **argv) { 
    unsigned char x = '\0'; 
    for (int n = 0; n <= 50; n++) printf("%d", x ^= 1); 
    return 0; 
} 
EOF 

101010101010101010101010101010101010101010101010101 
相關問題