int变量的位运算符

时间:2014-01-15 13:01:50

标签: c++ int hex

我跟随输入:

int category;
int ID

ID是以这种方式形成的数字:

//     CCXXXXNN
ID = 0x12345678;

虽然category是0x0和0xFF之间的数字。

我想检查类别是否等于ID的CC部分。我该怎么做?如果需要,我可以将类别从int更改为uint。

4 个答案:

答案 0 :(得分:3)

您可以将您拥有的类别值左移到适当的位置,并将这些位与ID中的相应位进行比较:

ID & 0xff000000 == category << 24  // Mask off the high bits of ID, compare with category shifted into those bits

或者您可以右移ID的类别位并根据类别值对其进行测试:

(ID >> 24) & 0xff == category  // Put the high bits of ID in the low bits of an int, and mask off that.

就个人而言,我会为部件编写访问器功能并使用它们,因为它使事情更具可读性和灵活性,并且很多不易出错。
根据我的经验,当你有点笨拙时,错误既易于制作又很难找到。

int get_category(int id) { return (id >> 24) & 0xff; }
int get_xxxx(int id)     { return (id >> 16) & 0xffff; }
int get_nn(int id)       { return id & 0xff; }

if (get_category(ID) == category && get_nn(ID) < 57)
    // and so on

答案 1 :(得分:2)

ID & 0xff000000 == category << 24

答案 2 :(得分:1)

(ID & 0xff000000) == (category << (6 * 4))

答案 3 :(得分:1)

实现它的另一种方法是使用union:

int category = 12;

union u
{
    int ID;
    struct a
    {
        BYTE dummy[3];
        BYTE category;
    } b;
} ;

u temp;

if (temp.b.category == category)
{
    // ...
}