我需要创建三个最终用三个32位生成的掩码,以三个32位生成的icetagcode(让我们调用它们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;
.

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

有帮助吗?

解决方案

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

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

或者您可以使用“ugly”八进制: - )

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
.

其他提示

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

这对您是可读的吗?

只是把你想要的数字放入你想要的号码(如果你喜欢使用十六进制符号):

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top