有效且可读的方法来隔离位组

时间:2012-01-15 22:38:47

标签: bit-manipulation bitwise-operators

给定偏移量OFF和长度LEN,隔离一组位并将其向右移动。 (用法:int持有几个具有给定偏移量和长度的小范围整数)。例如,使用偏移4和长度4,

  a = 110101011000
      ----^^^^---- this is the group 
      000000000101
              ^^^^ isolated and right-shifted here

我目前正在使用

(a>>OFF)&((1<<(LEN+1))-1)

给出上面的例子

a                         110101011000
a>>OFF                    000011010101
1<<(LEN+1)                000000010000
1<<(LEN+1)-1              000000001111
(a>>OFF)&((1<<(LEN+1))-1) 000000000101

有更可读/更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

在这种情况下,没有一个正确答案。你做的很好 - 这是正确的,并且有一些文档,它也很清楚。

如果你想要不同的方式,你可以:尝试向左移动a然后再向右移动(假设a是无符号的 - 否则先将其转换);或者您可以先创建一个掩码(在您的情况下:000011110000),按位 - 然后,然后才移动。但是,这些并不一定比你现有的更漂亮。

答案 1 :(得分:0)

110101011000

左转 0101.1亿

右转 000000000101

这更具可读性。!