我是编码新手,我正在努力完成这项任务,但我无法完成:
编写并使用一个以掩码为参数并返回结构的函数。
以下是我迄今为止所做的工作。有人能帮我理解我做错了什么吗?
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)