2013-04-07 32 views
1

我正在开发一个项目,并且跟踪单个字节中的标志。C++ - 如何检查是否与&运算符不相等

该字节可以设置几个选项。例如:

0x00000001 - Person 
0x00000002 - Object 
0x00000003 - Vehicle 

现在,当谈到时间来检查这些对象,我们可以这样做:

如果(标志& 00000001) {// 这是一个人 }

问题是,我想知道如何检查,看看它是不是一个人。原谅我,如果这是一个简单的答案,但我已经尝试,如果!标志& 0x00000001,它不检查。我也尝试将它与0比较,但仍然没有运气。

+1

你是否希望一次设置多个标志?如果是这样,你如何区分(例如)既是人又是物体的东西,以及只是一辆车的东西?如果没有,你应该使用相等('flags == 0x00000001')。 – Mankarse 2013-04-07 05:13:22

+0

我可以在一个字节中设置多个标志吗?我会怎么做? – 2013-04-07 05:19:20

+0

@PladniusBrooks,签出一个按位标志教程。 'operator |'可以应用一个标志。 – chris 2013-04-07 05:21:00

回答

8

你靠近。 operator!higher precedenceoperator&,所以你需要括号: '!'

if (!(flags & 0x00000001)) { 
    //this is not a person 
} 
+0

啊!非常感谢。我正在与一群行业专业人士合作,这是他们的渲染功能。所以我的选择没有你的答案是要嵌套一切更深层次或有一个if(标志&0x00000001){//什么也不做} {else {//做这个}; – 2013-04-07 05:13:25

2

运算符的优先级高于运营商'&', 所以使用!(标志& 0x1)代替。

PS:0x3不能呈现车辆,但它呈现一个人物和一个物体。使用0x4来呈现Vehicel。

+0

0x3上的好结果。正在尝试以此为例。哪些数字在字节级有效? – 2013-04-07 05:14:15

+0

@PladniusBrooks,任何'2^n'的结果对于单个位标志都是有效的,其中'n'从0到'sizeof(type) - 1'。除这些之外的任何数字都可以是组合两个或更多标志(或0标志为零)的结果。您可能会发现将标志定义为“2 << 0”,“2 << 1”,“2 << 2”等更容易。 – chris 2013-04-07 05:14:48

+2

使用“1 << 0”,“1 << 1”,“ 1 << 2'代替。要做到这一点,你应该找一本介绍二进制数和二进制算术的书。在这个网站上有各种各样的建议,但挑选一些简单和老式的东西。长大后,我有一本绍姆的纲要书,介绍了“半加器”和“加法器”的电路。请记住,如果你切断了所有的手指(向Tom Lehrer道歉),则基数2与基数10相同。 – 2013-04-07 05:23:58

相关问题