写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~
文章目录
- 一、题目描述
- 二、编程思路
- 三、代码实现
- 四、程序详解
一、题目描述
判断一个数是不是
二、编程思路
来判断它是否是 的幂。如果结果是 ,那么这个数就是
三、代码实现
bool isPowerOfTwo(int n) {
return n > 0 && (!(n & (n - 1)));
}
四、程序详解
在理解这个判断方法之前,我们需要了解一些二进制和位操作的基础知识。
首先,任何 的幂在二进制表示中只有一个位是 ,其余都是
- 二进制表示为
- 二进制表示为
- 二进制表示为
- 二进制表示为
- …
的幂减去 时,结果会在二进制表示中翻转所有比最高位
- 二进制表示为
- 二进制表示为
的幂,其二进制表示中只有一个 ,减去 之后,这个 变成 ,而它右边所有的 都变成 。因此, 的幂与它减 的结果的按位与操作结果为 ,因为没有一个位同时是 。
下面是对 !(n & (n - 1))
的详细解释:
-
n & (n - 1)
:这是对 和 进行按位与操作。如果 是 的幂,那么这个操作的结果应该是 。 -
!(n & (n - 1))
:对上述结果取反,如果 是 的幂,那么结果将是true
。
,因为 和负数不是
这里有一个简单的例子来说明:
- 假设 (100 二进制)
- (011 二进制)
- & &
-
true
是
不是 的幂,比如 (
- (
- KaTeX parse error: Expected 'EOF', got '&' at position 3: n &̲ (n - 1) = 110 &
-
false
因此, 不是
后记:
🌟 感谢您耐心阅读这篇关于 巧用位运算 的技术博客。 📚
🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢
🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀
🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡
🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀