我需要创建三个位掩码,最后是三个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;
但它看起来有点乱。任何人都可以提出更简洁(和可读)的方式吗?
答案 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 ;