力扣-2的幂
题目链接:https://leetcode.cn/problems/power-of-two/description/?envType=daily-question&envId=2025-08-09
题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。
分析
这道题非常简单,但是我们要学习的一些有关位运算的技巧和思路。
首先就是如何判断一个数是2的幂,单纯从平方开方来看可能有点复杂,我们不妨从二级制的角度来看:一个数 n 是 2 的幂,当且仅当 n 是正整数,并且 n 的二进制表示中仅包含 1 个 1。
那我们的问题就变成了如何判断一个数的二级制表达中只有一个1,这里有两个技巧
技巧一 n \& (-n)
该运算可以直接获取
由于负数在计算机中按照补码规则存储,
假设
其中:
表示若干个高位 表示最低位的那个 表示若干个
那么
进行按位与运算:
高位全部变为
如果
则
技巧二 n \& (n - 1)
该运算可以**移除
假设
那么
按位与运算:
高位
如果
则
Rust中的错误处理
代码
1 | /** |
- Title: 力扣-2的幂
- Author: tianyi
- Created at : 2025-08-09 09:34:47
- Updated at : 2025-08-21 14:01:32
- Link: https://github.com/ztygod/2025/08/09/力扣-2的幂/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments