【发布时间】:2023-01-31 21:09:07
【问题描述】:
我正在阅读关于 bit-fields 的 Wikipedia 条目,了解如何使用二进制数来表示原色并使用按位或 (|) 运算符组合它们。我想检查一种颜色是否包含在另一种颜色中。
#include <stdio.h>
// primary colors
#define RED 0b001
#define GREEN 0b010
#define BLUE 0b100
// mixed colors
#define BLACK 0b000
#define YELLOW (RED | GREEN)
#define MAGENTA (RED | BLUE)
#define CYAN (BLUE | GREEN)
#define WHITE (RED | GREEN | BLUE)
int main(void)
{
int magenta = MAGENTA;
int blue = BLUE;
#define in & // check if a color A is contained in another color B:
printf("%s\n", blue in magenta ? "true" : "false"); // true
printf("%s\n", magenta in blue ? "true" : "false"); // should be false but is true.
return 0;
}
我明白为什么会这样,但是是否有按位运算或其组合可以达到我想要的结果?
【问题讨论】:
-
(magenta & blue) == magenta -
您正在将
&更改为in以使其看起来更像自然语言。同时,&运算符并不关心左右参数的顺序。它只是检查这些位是否已设置。 -
@500-InternalServerError:不,不是。
-
但是
&是对称的。所以 A & B == B & A。将&细化为看起来像“in”中的不对称关系,你已经把自己弄糊涂了。
标签: c bit-manipulation bitwise-operators bit-fields