我有一个简单的问题。
我一直在用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
答案 0 :(得分:5)
当然。 10ul
是二进制1010,2是10.因此,执行x |= 10
也会设置第二位。
您可能希望使用0x10
和0x2
作为标记。这些可以按预期工作。
暂且不谈:十六进制表示法中的单个数字代表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 << 2
和1ul << 10
,它们分别是2和10位。或者你可能想要使用十六进制10,(十进制16,二进制10000),表示为0x10。