设置十六进制数字的数字

Pro*_*ere 5 c c++ bitwise-operators

如何设置十六进制数字?我目前有这个代码:

int row = 0x00000000;
row |= 0x3 << 8;
row |= 0x2 << 4;
row |= 0x1 << 0;

printf("Row: 0x%08x", row);
Run Code Online (Sandbox Code Playgroud)

只要"行"只是零,这就完美无缺.一旦我将其更改为以下内容:

int row = 0x33333333;
row |= 0x3 << 8;
row |= 0x2 << 4;
row |= 0x1 << 0;

printf("Row: 0x%08x", row);
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

行:0x33333333

Ale*_*dru 10

您应该先删除(使其为0)数字.

row &= ~(0xf << 4);
Run Code Online (Sandbox Code Playgroud)

~运算符反转数字中所有位的值.所以. 0x000000f0成为0xffffff0f.

您的代码应如下所示:

row &= ~(0xf << 8);
row |= 0x3 << 8;
row &= ~(0xf << 4);
row |= 0x2 << 4;
row &= ~(0xf << 0);
row |= 0x1 << 0;
Run Code Online (Sandbox Code Playgroud)