#12321. 最低位 1 的位置
最低位 1 的位置
最低位 1 的位置
题目描述
给定一个整数 n
,请输出它的二进制表示中 最低位的 1 出现在第几位(从 0 开始计数)。
- 例如:
n = 12 (1100)
→ 最低位的 1 在第 2 位;n = 18 (10010)
→ 最低位的 1 在第 1 位;n = 20 (10100)
→ 最低位的 1 在第 2 位。
输入格式
输入一个整数 n
。
输出格式
输出一个整数,表示最低位的 1 在第几位。
数据范围
1 ≤ n ≤ 10^9
(保证 n > 0,所以一定至少有一个 1)
输入输出样例
输入 1
12
输出 1
2
输入 2
18
输出 2
1
思路提示
- 方法 1:逐位判断
- 从低位到高位逐一检查
(n >> i) & 1
是否为 1; - 第一次发现 1 的位置就是答案。
- 从低位到高位逐一检查
- 方法 2:位运算技巧
n & -n
可以快速得到最低位的 1 所在的值(是 $2^k$);- 再用
__builtin_ctz(n)
(count trailing zeros,gcc/clang 提供)可以直接得到位置。