获得更高的使用位位置

时间:2015-07-23 06:58:43

标签: c# .net bitwise-operators

我有一些int32值。 我需要得到更高位的位置,用于表示当前值。

例如:

int value = 155;

以二进制形式显示10011011 所以使用的位数较高,位置为8。

是否有任何默认或常用方法?

2 个答案:

答案 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;
    }
}