有简洁的方法在C中创建位掩码吗?

时间:2011-09-12 09:00:40

标签: c bit-manipulation readability bit-masks

我需要创建三个位掩码,最后是三个32位unsigned ints(我们称之为x,y和z)。面具应该像这样结束:

x: 0000 0001 1111 1111 1111 1111 1111 1111
y: 0000 1110 0000 0000 0000 0000 0000 0000
z: 1111 0000 0000 0000 0000 0000 0000 0000

到目前为止,我已经得到了这个:

unsigned int x = (1<<25)-1;
unsigned int y = (~x)&((1<<28)-1);
unsigned int z = (~x)<<3;

但它看起来有点乱。任何人都可以提出更简洁(和可读)的方式吗?

3 个答案:

答案 0 :(得分:9)

unsigned int x = 0x01FFFFFF,
             y = 0x0E000000,
             z = 0xF0000000;

这对你来说是否可读?

答案 1 :(得分:4)

如果您使用的是C99,请使用“新”固定宽度类型:

uint32_t x, y, z;
x = 0x01FFFFFF;
y = 0x0E000000;
z = 0xF0000000;

或者你可以使用“丑陋的”八进制: - )

x = 000177777777; // 00 000 001 111 111 111 111 111 111 111 111
y = 001600000000; // 00 001 110 000 000 000 000 000 000 000 000
z = 036000000000; // 11 110 000 000 000 000 000 000 000 000 000

答案 2 :(得分:2)

只需在您的unsigned int中输入您想要的数字(如果您更喜欢使用十六进制表示法):

unsigned int mask= 8 ; // 00000000 00000000 00000000 00001000
unsigned int mask = 0x08 ;