在 C 语言中,假设我有一个 unsigned char 类型的 A,它只能为 0 或 1。
我想要寻找一个按位逻辑运算符,将 A 转换为 !A。
注意:我在 GPU 上使用此代码,与逻辑运算符相比,按位运算符非常便宜。即 XOR 比 ! 更便宜。
注意:我在 GPU 上使用此代码,与逻辑运算符相比,按位运算符非常便宜。即 XOR 比 ! 更便宜。
如果你的意思是将1发送到0并将0发送到1,则可以使用异或运算符^
来实现。如果字符被称为c,你可以写成c = c ^ 1;
。
A = !A;
。c = c ^ 1
只会反转 char 的第一位,我不知道你为什么需要这样做。 - HolyBlackCat您应该使用"逻辑非"运算符:
A = !A;
您也可以使用"按位取反"运算符,但这样会使您的代码更难理解,因为实际上您所做的是逻辑非操作:
A = ~A;
如果你只需要一个可以反复切换的标志,使用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