获得低阶N位

时间:2011-03-18 15:56:16

标签: c# .net bit-manipulation

有没有办法可以获得任何整数的低阶 n 位(其中 n 可以是1到32之间的任何数字),而无需事先预先计算32位掩码,每个订单一个,并使用&运算符?我也不想使用权限为2的%,只是按位操作。

编辑:例如,假设用户输入一个整数Num和另一个整数ShiftCount,其值介于1到32之间。我想存储第三个变量是在操作Num >> ShiftCount中丢失的位。

3 个答案:

答案 0 :(得分:10)

Num & ((1 << ShiftCount) - 1)

之类的东西

答案 1 :(得分:3)

这个解决方案怎么样?这是严格的比特 - 没有数学要求:

public static int LowOrderBits( int value , int bits )
{
  if ( bits < 0 || bits > 32 ) throw new ArgumentOutOfRangeException("bits") ;
  return (int) ( ((uint)value) & ~(0xFFFFFFFF << bits) ) ;
}

@ jdv-Jan de Van的解决方案需要减法,@ Mark Sowul也需要减法(以获得n的值:

public static int LowOrderBits( int value , int bits )
{
  if ( bits < 0 || bits > 32 ) throw new ArgumentOutOfRangeException("bits") ;
  return (int) ( ((uint)value) & (0xFFFFFFFF >> (32-bits) ) ) ;
}

减法可能比简单的位操作更昂贵。

答案 2 :(得分:0)

如何从1111 ... 1111(UInt32.MinValue)开始,右移它n位(确保使用uint,因此它不会签名扩展!),然后&amp; -ing it with the it你想要低阶位的值?