C ++ Int位操作是2UL = 10UL?

时间:2012-02-19 12:44:01

标签: c++ c bit-manipulation

我有一个简单的问题。

我一直在用c / c ++中的位操作一段时间,我最近发现当我将2UL和10UL与常规的无符号int进行比较时,它们似乎返回相同的位。

例如,

#define JUMP 2UL
#define FALL 10UL

unsigned int flags = 0UL;
this->flags |= FALL;

//this returns true
this->is(JUMP);

bool Player::is(const unsigned long &isThis)
{
return ((this->flags & isThis) == isThis);
}

请确认2U是否等于10U,如果是,如果我需要一个无符号整数中的8(?)个标记,我该如何解决呢?

亲切的问候,

-Markus

3 个答案:

答案 0 :(得分:5)

当然。 10ul是二进制1010,2是10.因此,执行x |= 10也会设置第二位。

您可能希望使用0x100x2作为标记。这些可以按预期工作。

暂且不谈:十六进制表示法中的单个数字代表4位,而不是8位。

答案 1 :(得分:1)

JUMP, 2:  0010
FALL, 10: 1010

FALL & JUMP = JUMP = 0010

答案 2 :(得分:1)

二进制的十进制2是0010,而十进制10是二进制1010.如果你按位 - 和它们(2 & 10),则产生二进制0010或十进制2.因此10 & 2确实等于2。也许你打算测试1ul << 21ul << 10,它们分别是2和10位。或者你可能想要使用十六进制10,(十进制16,二进制10000),表示为0x10。