C语言递归统计16位整数置位bit个数 代码模板填空问题
16位整数置位个数递归函数填空解答
你给出的(1)(3)空的初步判断都是正确的,第(2)空的核心逻辑是判断当前整数x的第n个二进制位是否为1,推荐两种合法写法:
- 写法1:
(x >> n) & 1
原理:把x右移n位,让第n位落在最低位的位置,再和1做按位与运算,结果为1就说明该位是1。 - 写法2:
x & (1 << n)
原理:把1左移n位得到只有第n位为1的掩码,再和x做按位与运算,结果非0就说明该位是1。
完整填空后的参考代码:
int dlukim(int x, int n, int count) { if (n > 16) return count; // 空(1)答案 else { if ( (x >> n) & 1 ) count++; // 空(2)答案,也可替换为x & (1 << n) n++; // 空(3)答案 return dlukim(x, n, count); // 空(4)填x,注意原模板漏写return和分号,否则递归返回值会丢失 } }
调用说明
初始调用时传入n=0、count=0即可,例如dlukim(待统计的整数, 0, 0)会返回对应置位个数。
内容的提问来源于stack exchange,提问作者adirk1
相关产品推荐
相关产品推荐

