我希望得到第一位的索引等于1,以及最后一位的索引等于1。 例如:
数据= 0x3E的
第一位= 1
最后一位= 5
我该怎么做?
答案 0 :(得分:0)
答案 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);
}
答案 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];
我将把它作为练习来自动创建表格。 :)