私はビットマスクを作りたいと思います。以下の定義はすでに採用されています。定義とそれを次にビットマスクをより多くの可能性に進化させる必要があります
#define SEC_NO_FLAGS 0x000
#define SEC_ALLOC 0x001
#define SEC_LOAD 0x002
#define SEC_RELOC 0x004
#define SEC_READONLY 0x008
#define SEC_CODE 0x010
#define SEC_DATA 0x020
#define SEC_ROM 0x040
は、私がuint32_t ptr = 0;
初期化し、私のことができOR:
ptr |= SEC_ALLOC;
を今、私は定義を拡張したい:
#define SEC_CORE_1 0x080
#define SEC_CORE_2 0x0F0
#define SEC_CORE_3 0x110
#define SEC_CORE_4 0x120
#define SEC_CORE_5 0x140
#define SEC_CORE_6 0x180
がどのように選択する必要があります上記でユニークなビットマスクを持つことを定義していますか?
しかし、私はビットマスクをテストします。
std::string
ParseManager::mapFlags(uint64_t flag)
{
std::string tmp = "";
if (flag & SEC_ALLOC)
{
tmp.append("a");
}
if (flag & SEC_CODE)
{
tmp.append("x");
}
if (flag & SEC_READONLY)
{
tmp.append("r");
}
if (flag & SEC_DATA)
{
tmp.append("w");
}
if (flag & SEC_LOAD)
{
tmp.append("l");
}
if (flag & SEC_CORE_1)
{
tmp.append("c1");
}
if (flag & SEC_CORE_2)
{
tmp.append("c2");
}
if (flag & SEC_CORE_3)
{
tmp.append("c3");
}
if (flag & SEC_CORE_4)
{
tmp.append("c4");
}
if (flag & SEC_CORE_5)
{
tmp.append("c5");
}
if (flag & SEC_CORE_6)
{
tmp.append("c6");
}
return tmp;
}
定数式 '1 << 0'、 '1 << 1'、 '1 << 2'など – MSalters