C#得到位索引

时间:2014-02-13 21:36:25

标签: c#

我希望得到第一位的索引等于1,以及最后一位的索引等于1。 例如:

数据= 0x3E的

第一位= 1

最后一位= 5

我该怎么做?

3 个答案:

答案 0 :(得分:0)

查看BitArray类及其Item属性。然后你可以创建一个BitArray并循环它的项目以轻松获得你想要的东西。

答案 1 :(得分:0)

我敢肯定你可以使用一些有趣的小窍门技巧,但这是一个天真的解决方案:

public static void Main()
{
    uint data = 0x3E;
    uint firstMask = 1;
    uint lastMask = 0x80000000;
    int? first = null;
    int? last = null;

    for (int i=0; i < 32; i++) {
        if ((firstMask & data) > 0 && first == null)
        {
            first = i;
        }
        if ((lastMask & data) != 0 && last == null)
        {
            last = i;
        }
        firstMask = firstMask << 1;
        lastMask = lastMask >> 1;
    }
    last = 31-last;


    Console.WriteLine(first);
    Console.WriteLine(last);
}

请参阅http://dotnetfiddle.net/FmN7QL

答案 2 :(得分:-1)

手动构建查找表:

var firstBit = new int[0x100] { -1, 0, 1, 0 ... };
var lastBit  = new int[0x100] { -1, 0, 1, 1 ... };

然后使用'data'索引这些表。

byte data = 0x3e;    
var f = firstBit[data];
var l = lastBit[data];

我将把它作为练习来自动创建表格。 :)