2011-09-12 12 views
3

3ビットのマスクを作成して、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

16進数で書くのはなぜですか? 8文字がそれぞれ簡潔に見える – daniel

+0

@pmg:ありがとう、それはもっと良く見えます! –

答えて

4

、「新しい」固定幅のタイプを使用します。

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; 

これは読み取り可能ですか?単にあなたが望む数(あなたは16進数表記を使用して好む場合)int型、あなたの符号なしに入れ

2

:あなたはC99を使用している場合

unsigned int mask= 8 ; // 00000000 00000000 00000000 00001000 
unsigned int mask = 0x08 ; 
関連する問題