You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中利用位字段与位运算实现颜色包含判断的正确方法

正确实现颜色包含判断的位运算方法

你的问题出在直接用&运算符判断,magenta & blue结果为非零值,因此被判定为true。要正确判断颜色A是否包含在颜色B中,需要验证A的所有有效位都在B中存在,对应的位运算组合是:(A & B) == A。

修改后的代码示例

#include <stdio.h>

// 原色定义
#define RED 0b001
#define GREEN 0b010
#define BLUE 0b100

// 混合色定义
#define BLACK 0b000
#define YELLOW (RED | GREEN)
#define MAGENTA (RED | BLUE)
#define CYAN (BLUE | GREEN)
#define WHITE (RED | GREEN | BLUE)

// 定义判断宏:A是否包含在B中
#define is_contained_in(A, B) ((A & B) == A)

int main(void) 
{
    int magenta = MAGENTA;
    int blue = BLUE;

    printf("%s\n", is_contained_in(blue, magenta) ? "true" : "false"); // true
    printf("%s\n", is_contained_in(magenta, blue) ? "true" : "false"); // false
    return 0;
}

原理说明

  • A & B会保留同时存在于A和B中的位。如果A完全包含在B中,那么这个结果就和A完全一致。
  • 比如magenta & blue得到BLUE,和magenta(RED|BLUE)不相等,因此返回false,符合预期。
  • 特殊情况:BLACK(0)会被判定为包含在任何颜色中,因为(0 & B) == 0总是成立,这符合逻辑——黑色不包含任何原色,自然属于所有颜色的子集。

内容的提问来源于stack exchange,提问作者First User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:35:42