早上好,下午或晚上,获取低阶n位
有什么办法,你可以得到任何整数的低位ñ位(其中ñ可以是1到32之间的任意数字)之前没有预先计算32位掩码,每个订单一个,并使用&
运算符?我也不想使用%
两个幂,只是按位操作。
编辑:说,例如,该用户输入的整数Num
和另一个整数ShiftCount
取值范围往复1〜32我想在第三变量来存储一个值,该值是在操作Num >> ShiftCount
丢失的位。
非常感谢。
早上好,下午或晚上,获取低阶n位
有什么办法,你可以得到任何整数的低位ñ位(其中ñ可以是1到32之间的任意数字)之前没有预先计算32位掩码,每个订单一个,并使用&
运算符?我也不想使用%
两个幂,只是按位操作。
编辑:说,例如,该用户输入的整数Num
和另一个整数ShiftCount
取值范围往复1〜32我想在第三变量来存储一个值,该值是在操作Num >> ShiftCount
丢失的位。
非常感谢。
如何从1111 ... 1111(UInt32.MinValue)开始,将它右移n位(确保使用uint使其不能签名扩展!),然后使用你想要低位的值?
这个解决方案如何?它是严格位变换—无需数学:
public static int LowOrderBits(int value , int bits)
{
if (bits < 0 || bits > 32) throw new ArgumentOutOfRangeException("bits") ;
return (int) (((uint)value) & ~(0xFFFFFFFF << bits)) ;
}
@ JDV-简·德·范的解决方案需要减法,做@马克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))) ;
}
减法可能比简单的位操作更昂贵的操作
你想掩盖更高的位?或者获取低位作为bools/ints? – Ani 2011-03-18 15:59:23