按位运算符将 0 转换为 1,将 1 转换为 0

Bitwise operator to convert 0 to 1 and 1 to 0

在 C 中,假设我有一个 unsigned char A,它可以是 0 或 1。 我想找到一个将转换的按位逻辑运算符 A 到 !A.

注意:我在 GPU 上使用此代码,与逻辑运算符相比,按位运算符的成本非常低。即 XOR 比 !

便宜得多

如果 'not' 你的意思是将 1 发送到 0,将 0 发送到 1。你可以使用 XOR 运算符 ^ 来做到这一点。如果字符叫c,可以写成c = c ^ 1;.

您应该使用 "logical not" 运算符:

A = !A;

您也可以使用 "bitwise not" 运算符,但这会使您的代码更难理解,因为您所做的实际上是逻辑非:

A = ~A;

如果您只需要一个标志来重复切换,则使用 1 的 XOR 赋值非常方便。

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

101010101010101010101010101010101010101010101010101