2011-09-12 32 views
3

我需要创建三个位掩码,最后在三个32位unsigned ints(我们称它们为x,y和z)。口罩应该结束了这样的:有没有一个简洁的方法来创建C中的位掩码?

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; 

但似乎有点乱。任何人都可以想出一个更简洁(可读)的方式吗?

+7

'X = 0x01FFFFFF; y = 0x0E000000; z = 0xF0000000;' – pmg

+2

为什么不用十六进制编写它们?每个8个字符似乎足够简洁 – daniel

+0

@pmg:谢谢,看起来好多了! –

回答

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 
8
unsigned int x = 0x01FFFFFF, 
      y = 0x0E000000, 
      z = 0xF0000000; 

这是可读的吗?

2

简单地把你的unsigned int类型,你想要的(如果你喜欢使用十六进制)。数量:

unsigned int mask= 8 ; // 00000000 00000000 00000000 00001000 
unsigned int mask = 0x08 ; 
相关问题