首页 > 学院 > 开发设计 > 正文

求最右边的第一个1的数组

2019-11-06 08:22:17
字体:
来源:转载
供稿:网友

求一个字节(8位)表示的数字中查找最右边第一个非0的数字的位置,该数组如何解析呢?

static const uint8 rightmost_one_pos[256] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};

解析:此数组对应了8位,也就是一个字节的数字对应的最右边非0的第一个bit的位置。 对应数组【0~7】位。 假如:00000000,没有最右边的,对应数组组下标为0 00000001,最右边非0为第1个数,对应数组下标为1 00000010,最右边非0为第2个数, 对应数组下标为2 00000011,最有表非0为第1个数,对应数组下标为3 00000100,最右边非0为第3个数,对应数组下标为4 …… 可以看出来,数组中下标对应的数字比我们计算的小1。 会在后来讲解。 所以,此数组中保存的数字,使我们计算的最右边非0的数字的结果。


上一篇:Maven内置隐式变量

下一篇:c#入门

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表