首页 > 代码库 > 位运算应用
位运算应用
问题描述:
输入一个整数,返回其二进制表示中最低的一位为1的下标值。
很多CPU都在硬件层面直接提供该指令,例如,i386的BSF指令。但是,如果硬件没有提供该指令,又当如何。来看kernel中的算法:
应用分治思想进行依序判断.....
1 int __ffs(int x) 2 { 3 int r = 0; //r:用来标记下标,初始化为0。 4 5 if (!x) 6 return 0; 7 if (!(x & 0xffff)) { //即0 1111 1111 1111 1111 8 x >>= 16; 9 r += 16; 10 } 11 if (!(x & 0xff)) { //即0 1111 1111 12 x >>= 8; 13 r += 8; 14 } 15 if (!(x & 0xf)) { //即0 1111 16 x >>= 4; 17 r += 4; 18 } 19 if (!(x & 3)) { //0x03————即0011 20 x >>= 2; 21 r += 2; 22 } 23 if (!(x & 1)) { //0x01 24 x >>= 1; 25 r += 1; 26 } 27 return r; 28 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。