c-编写并使用一个以掩码为参数并返回结构的函数



我是编码新手,我正在努力完成这项任务,但我无法完成:

编写并使用一个以掩码为参数并返回结构的函数。

以下是我迄今为止所做的工作。有人能帮我理解我做错了什么吗?

typedef enum {
    fast = 1,
    slow = 2,
    strong = 4,
    smart = 8,
    agile = 16,
}Skills;
typedef struct _Team {
int ranking;
char name;
} Team;
Team Alabama;
Team USC;
Team _function (Skills skills);
Team _function (Skills skills) {
    if (skills == (fast | smart)) {
        return Alabama; }
    if (skills == (fast | agile))
        return USC;
    else
        return nil;
}

当您有基于掩码的枚举时,您可以使用位AND运算符&检查该枚举是否满足要求。

所以,如果你想检查技能是否快速和聪明,可以这样做:

if ((skills & fast) && (skills & smart)) {
    // this team has the brains and speed.. possible other stuff
}

或者,在这种情况下,XOR运算符也是一个很好的候选者:

if (skills ^ (fast | smart) == 0) {
    // this team has ONLY the brains and speed.
}

最后一条注释:

像这样定义枚举要容易得多:

typedef enum {
    fast   = 1 << 0,
    slow   = 1 << 1,
    strong = 1 << 2,
    smart  = 1 << 3,
    agile  = 1 << 4,
} Skills;

编辑:

好吧,既然这是一项任务,让我来解释一下它是如何工作的:

你肯定知道,你的枚举看起来像这样(二进制):

(00001)
(00010)
...
(10000)

现在,使用位OR运算符|,您可以将两种技能合并在一起:

   00001
OR 01000
   _____
   01001

然后,我们可以使用&:检查新的多技能枚举是否具有某些特定技能

    01001
AND 01000
    _____
    01000 != 0 (aka true)

为了达到更高级的水平,我们使用XOR,根据定义,如果两个比特相等,则将结果比特设置为0

    01001
XOR 01000
    _____
    00001 != 0 (aka true)
    01001
XOR 01001
    _____
    00000 == 0 (aka false)

最新更新