非常简单的掩蔽

时间:2011-09-07 22:24:08

标签: c logic bit-manipulation

在3个操作中,如何将一个字节转换为与此匹配的32位int:

0x1fffe

我一次只能显式访问一个字节,因此我从0xFF开始,然后将其移位。

我可以使用4个操作来完成它,但我找不到消除一个操作的方法。

    int mask2 = 0xFF << 8;
    mask2 = mask2 | 0xFE;
    mask2 = mask2 + mask2;
    mask2 = mask2 | 0x02;

有什么想法吗?

换句话说,我需要一个掩码,0x1FFFE可以在3次操作中进行,而一次只能访问一个字节,就像示例一样。

5 个答案:

答案 0 :(得分:2)

也许这就是你想要的......你从一个字节值(0xff)开始,然后使用3 按位操作来处理它,获得0x1fffe。

int in = 0xff;
int out = in<<9 | in<<1;

答案 1 :(得分:2)

转移,添加,转移,这是三个操作,对吗?

((0xff << 8) + 0xff) << 1

答案 2 :(得分:1)

有两个操作:

res = (1 << 17) - 2

答案 3 :(得分:0)

int mask2 = 0xFF;
mask2 |= mask2 << 8;
mask2 += mask2;

答案 4 :(得分:0)

这个怎么样:

((~0xffU) >> 11) - 1

这假定为32位整数......

也许这更好地表达为:

uint32_t x = 0xff;

x = ~x;
x >>= 11;
x -= 1;