2013-02-25 45 views
-2

也许有这个答案,但我找不到一个我明白的,所以原谅我。用bitmanipulation在unsigned int中存储一个值

假设你有一个无符号int(32位)的变量foo我想用它来存储值。作为一个例子,我想将值1和4作为标志存储在unsigned int中使相应的二进制位为1. foo然后将看起来像全零,直到它将是0001 0010的最后八位(其中最右边的0表示值0)。我如何使用bitmanipulation来做到这一点?

回答

2

事情是这样的:

unsigned int const flag_one = 0x02; // 0000 0010 
unsigned int const flag_four = 0x10; // 0001 0000 

unsigned int myflag = flag_one | flag_four; 

// to test: 
if (myflag & flag_one) { /* flag one is set */ } 

// to set: 
your_flag |= flag_four;  // ORs with 0001 0000 

// to clear: 
their_flag &= ~flag_four; // ANDs with 1110 1111 
0

如果你想标记特定的地方,只使用一个位位移。这里有一个小例子:

void setflag(int * flag, int place) 
{ 
    // Or sets it to true if it's 0 or 1 
    *flag |= (1 << place); 
} 
int main(int argc, char const *argv[]) 
{ 
    int flag = 0; 

    setflag(&flag, 1); 
    setflag(&flag, 4); 

    printf("Flag is now %d\n", flag); 
    return 0; 
} 

输出:

Flag is now 18 

18二进制是10010,因此符合你的标准。