Iphone 正在尝试将整数与枚举一起使用(<;<;)
我对术语不是很在行。。以下是我的代码:Iphone 正在尝试将整数与枚举一起使用(<;<;),iphone,objective-c,c,ios,Iphone,Objective C,C,Ios,我对术语不是很在行。。以下是我的代码: enum { LoggerLogNone = 0, LoggerLogMessages = 1 << 0, LoggerLogErrors = 1 << 1 }; typedef NSUInteger LoggerLogs; 我不知道如何做的是检查是否选中了LoggerLogMessages或LoggerLogErrors。 任何帮助都将不胜感激。我肯定在这里的某个地方有答案,
enum {
LoggerLogNone = 0,
LoggerLogMessages = 1 << 0,
LoggerLogErrors = 1 << 1
};
typedef NSUInteger LoggerLogs;
我不知道如何做的是检查是否选中了LoggerLogMessages
或LoggerLogErrors
。
任何帮助都将不胜感激。我肯定在这里的某个地方有答案,但由于我不知道要使用的术语,因此很难搜索>_
两者都
如果要检查是否应该记录消息,请使用按位和
if(logFlags & LoggerLogMessages)
//log the message
类似地,如果要记录错误消息
if(logFlags & LoggerLogErrors)
//log the message
此外,它们的常用术语是或如果要检查是否应该记录消息,请使用按位和
if(logFlags & LoggerLogMessages)
//log the message
类似地,如果要记录错误消息
if(logFlags & LoggerLogErrors)
//log the message
此外,它们的常用术语是or,您正在寻找的是按位AND运算符,&
if (logs & LoggerLogMessages) {
...
}
if (logs & LoggerLogErrors) {
...
}
您正在寻找按位AND运算符,&
if (logs & LoggerLogMessages) {
...
}
if (logs & LoggerLogErrors) {
...
}
要检查是否设置了标志,只需对存储标志的变量执行按位AND(&
)即可,如果该位序列包含在变量中,则结果将是所检查的标志:
if ( (logs & LoggerLogMessages) == LoggerLogMessages ) {
// LoggerLogMessages is set
}
或者你可能只是有:
if (logs & LoggerLogMessages) { ... }
要检查是否设置了标志,只需对存储标志的变量执行按位AND(&
)即可,如果该位序列包含在变量中,则结果将是所检查的标志:
if ( (logs & LoggerLogMessages) == LoggerLogMessages ) {
// LoggerLogMessages is set
}
或者你可能只是有:
if (logs & LoggerLogMessages) { ... }
我认为您需要按位AND的逻辑or,如:
if ((flag & LoggerLogMessages) || (flag & LoggerLogErrors))
另一件需要了解的事情是,您关心的两个状态是唯一的两个,并且都>0,所以
if (flag)
也能用。我想你需要一个逻辑or的按位AND,比如:
if ((flag & LoggerLogMessages) || (flag & LoggerLogErrors))
另一件需要了解的事情是,您关心的两个状态是唯一的两个,并且都>0,所以
if (flag)
也会起作用。typedef
不必在enum
之前执行。请在编译器中尝试。如果他想像打字一样使用它,它需要一个typedef。@danh:不,OP正在做。@Josh:我明白了。谢谢你的提示。我回答了他问题的错误部分。我相应地编辑了回复。typedef
不必在enum
前面。请在编译器中尝试。如果他想像打字一样使用它,它需要一个typedef。@danh:不,OP正在做。@Josh:我明白了。谢谢你的提示。我回答了他问题的错误部分。我相应地编辑了回复。非常感谢:-D它有效。我早该知道。。说到术语,我的记忆力是有史以来最差的。非常感谢:-D它很管用。我早该知道。。说到术语,我的记忆力是有史以来最差的。