C++ C++;整数位是否为2UL=10UL?

C++ C++;整数位是否为2UL=10UL?,c++,c,bit-manipulation,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 &isT

我有一个简短的问题

我在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(?)个标志,我将如何绕过它

亲切问候,


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

您可能想使用
0x10
0x2
作为标志。这些将如您所期望的那样工作


顺便说一下:十六进制表示法中的一位数字表示4位,而不是8位。

二进制中的十进制2是0010,而十进制10是二进制1010。如果按位和它们
(2和10)
,则生成二进制0010或十进制2。所以
10&2
实际上等于2。也许你的目的是测试
1ul哦,是的,现在我明白了。谢谢所以我想要的是1,2,4,8,16等等。我要做的是1UL,2^1UL,2^2UL,2^3UL。然而,它并没有像我预期的那样工作。有没有比512UL、1024UL等更漂亮的方法来定义这些值?@Orujimaru:
1UL谢谢,所以1ULNo,一点也不<代码>1u
JUMP, 2:  0010
FALL, 10: 1010

FALL & JUMP = JUMP = 0010