在C中,假設我有一個無符號字符A,它可以是0或1. 我想找到一個按位邏輯運算符,將 A轉換爲!A 。按位運算符將0轉換爲1並將1轉換爲0
注意:我在GPU上使用此代碼,與邏輯運算符相比,按位運算符非常便宜。即XOR比!便宜得多!
在C中,假設我有一個無符號字符A,它可以是0或1. 我想找到一個按位邏輯運算符,將 A轉換爲!A 。按位運算符將0轉換爲1並將1轉換爲0
注意:我在GPU上使用此代碼,與邏輯運算符相比,按位運算符非常便宜。即XOR比!便宜得多!
如果不是'你的意思是發送1到0和0到1.你可以使用異或運算符^
來做到這一點。如果字符被稱爲c,則可以編寫c = c^1;
。
另外,如果我把一個真正的布爾表達式當作一個char,那個char是否等於1?即char test =(A == 1);在這種情況下,測試是否等於1? – Jacko
@Jacko是的。另外,你應該從另一個答案中使用'A =!A;'。 'c = c^1'只會反轉字符的第一位,我想你爲什麼需要這樣做。 – HolyBlackCat
謝謝,HolyBlackCat。但是,如果c == 0,那麼c^1將等於1.如果c == 1,那麼c^1將等於0.所以這就是我正在尋找的。 – Jacko
您應該使用「邏輯非」運算符:
A = !A;
您還可以使用「按位非」操作,但是這樣會讓你的代碼更難理解,因爲你在做什麼,實際上是邏輯不是:
A = ~A;
我已經中和了downvote;我認爲你的回答很直觀! – Poriferous
'A =!A'是最清晰的IMO。 – ormaaj
謝謝。我試圖避免邏輯運算符。我已經添加了這個問題。 – Jacko
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
什麼語言? C? – GrahamS
你是什麼意思與「!A」?這沒有任何意義,沒有一個角色的倒置。 – specializt