我有一些int32值。 我需要得到更高位的位置,用于表示当前值。
例如:
int value = 155;
以二进制形式显示10011011
所以使用的位数较高,位置为8。
是否有任何默认或常用方法?
答案 0 :(得分:6)
pos
将是基于0的索引
var pos = (int)Math.Log(155, 2);
当然,您应该查看yourval>0
对于更棘手的人,请参阅https://graphics.stanford.edu/~seander/bithacks.html#IntegerLogIEEE64Float
答案 1 :(得分:1)
GetBit每个位都可以读取真(1)或假(0)和32位循环查找第一个真位的索引。
public static class ByteExtensions
{
public static bool GetBit(this byte byteValue, int bitIndex)
{
return (byteValue & (1 << bitIndex - 1)) != 0;
}
public static int GetMaxBitIndex(this byte byteValue)
{
for (int i = 32; i > -1; i--)
{
if (byteValue.GetBit(i))
return i;
}
return -1;
}
}