位运算——判断整数a是否为2的正整数幂?

位运算之判断二的正整数幂 给定整数 n 判断 n是否为 2的正整数幂 表达式:(! (n & (n-1)) && n举个例子: n = 16 = 10000,n-1 = 15 = 1111 那么 :10000 & 01111 = 00000 = 0 再举个例子: n = 256 = 10000000 ,n-1 = 255 = 11111111 那么:100000000 & 011111111 = 000000000 = 0 阅读详情

// 大部分位运算的技巧早在几十年前就被前辈们在有限的计算环境下“榨”出来了。

// “原创”只是表示这篇文章是我所写,并非翻译或转贴,但也绝不是我“首创”。

10进制中,10的幂仅有“最高”位是1,其他均为0。比如:1、10、100、100000

同样,2进制中2的幂也仅有“最高”位是1。而且,如果减去1的话,最高位为0,低位全1。此时a与(a - 1)之间,没有同为1的位。

如果a不是2的正整数幂,那么a除了最高位外,还必有某个低位为1,因此减1不会对最高位做“借位”,所以此时a与(a - 1)最高位均为1。

因此2的幂必有:

(x & (x-1)) == 0 
但0也满足这个式子,所以要:
x && !(x & (x - 1))

f2fs学习笔记 - 3. F2FS文件系统布局 目录1.前言2.F2FS布局说明2.1. super block(block 0x0 ~ block 0x1ff)2.2 CP(block 0x200 ~ block 0x5ff)cp page1nat journalsit journaldata summarycurrent hot node summarycurrent warm node summarycurrent cold node summarycp page22nd checkpoint2.3 SIT(block 0x600 ~ block 阅读详情

相关推荐

操作不能完成 (错误 0x00000709) 共享打印机无法连接解决办法

环境:windows Server 2012 + Win10 客户端 问题:使用计算机名和IP地址可以正常连接打印机,但是使用另外的A记录或CN记录无法连接,报此错误 原因:这是打印服务DNS解析的问题 故障补充:假设你的服务器电脑名称叫print01,但是你又建了一条A记录或者CNname 叫PR01,就会发现使用额外的A记录或CN记录就无法连接 故障截图: 操作不能完成 (错误...

瑞哥的博客 3万+

判断字符串结尾方式(python)

输入2个字符串,判断其中一个字符串是否是以另一个字符串结尾 输入格式: 输入2行,每行一个字符串数据 输出格式: 如果第1个字符串以第2个字符串结尾,输出第2个字符串 如果第2个字符串以第1个字符串结尾,输出第1个字符串 如果两个字符串互为对方的结尾字符,输出'all' 如果都不满足,输出'no' 输入样例: abc123 123 输出样例: 123 a=input() b=input() x...

芝士味椒盐的博客 5448

技术面试官视角:复盘北航/中科院/哈工大保研机试与面试,他们到底在考察什么?(附真题回忆与评分侧重点)

本文从技术面试官视角解析北航、中科院、哈工大等顶尖院校保研机试与面试的考核逻辑,揭示编程语言限制、题目难度设计等隐藏考察维度,并提供真题回忆与评分侧重点。帮助考生理解面试官的真实意图,掌握应对策略,提升通过率。

weixin_42549496的博客 518

用位运算解决2的幂数问题

一个数n是2的幂数,当且仅当n是正整数,并且n的二进制表示中只包含一个1. 所以判定该n的条件就是二进制表示中就有一个1,判定方法有两种: ①让n与n-1的二进制进行与运算,得到的结果是0,则证明是2的幂数。 ②让n与-n进行与运算得到的结果仍然是n,则证明是2的幂数。 力扣 java①: class Solution { public boolean isPowerOfTwo(int n) { if((n>0)&& ((n & (n-1.

m0_61723200的博客 2399

基于树莓派5的AR头显开发:从硬件选型到Unity整合全解析

增强现实(AR)技术通过将虚拟信息叠加到真实世界,为用户提供沉浸式交互体验。其核心原理依赖于计算机视觉进行环境感知与空间定位,并结合实时3D渲染实现虚实融合。在工程实践中,嵌入式平台因其低成本、低功耗特性,成为探索AR应用边界的重要载体。本项目以树莓派5为核心,通过集成OpenCV进行ArUco标记识别实现精准空间定位,并利用MediaPipe完成手势交互,最终在Unity引擎中完成虚实场景的实时渲染与融合,为开发者提供了一个完整的、可亲手实践的AR系统开发方案。

weixin_32430941的博客 254

工业自动化实战:用LabVIEW的DSC模块实现MODBUS-TCP设备控制

本文详细介绍了如何利用LabVIEW的DSC模块实现工业自动化中的MODBUS-TCP设备控制。通过环境准备、核心功能解析、状态机实现及典型工业场景实战,帮助工程师快速掌握稳定可靠的通讯技术,提升工业自动化系统的运行效率。

salt9的博客 1057

位运算chapter3:判断是否是2的幂的幂------构造掩码法

这个掩码的构造思路也十分简单,首先找到二的幂的这个数的二进制表达式,比如说32,是100000,然后-2,得到11110,最后把它反复拼接(从11110变成1111011110以此类推),并删去超过数据类型的部分。是2的幂,然后检查1是否在奇数位上,因为4的任何幂的二进制表示将只有一个1,并且1出现在偶数位置上。,用一个特定的掩码来检查1的位置是否符合2的幂的幂的规则。这个掩码里的‘1’是用来屏蔽非2的幂的幂的位置的。同理,16的幂验证,确保1出现在4的倍数的位置上。brian kernighan算法。

2301_79691274的博客 960

在 SAP Fiori 里玩转 Manage Views:把过滤器与列表布局固化成你的默认工作台

本文介绍了SAP Fiori应用中"Manage Views"功能的核心价值和使用方法。该功能允许用户保存和复用个性化界面设置,包括筛选条件、列布局等,将重复操作简化为一次性配置。文章从技术实现、用户操作和治理建议三个维度展开: 功能本质:View存储的是界面状态而非业务模型,是提升个人生产力的工具 核心价值:固化高频操作,支持默认视图设置,实现"开箱即用"的工作状态 操作指南:详细说明了收藏、重命名、设为默认、自动应用等关键功能 治理建议:区分标准视图、个人视图和公

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 126

n&(n - 1)位运算判断是2的幂

  假设n的二进制表示为 (a10⋯0)2,其中 a表示若干个高位,1 表示最低位的那个 1,0⋯0表示后面的若干个 0,那么 n−1的二进制表示为: (a01⋯1)2   我们将 (a10⋯0)2​ 与(a01⋯1)2进行按位与运算,高位 a不变,在这之后的所有位都会变为 0,这样我们就将最低位的那个 1 移除了。   因此,如果 n是正整数并且 n & (n - 1) = 0,那么 n就是 2的幂。 注: 一个数 n 是 2 的幂,当且仅当 n是正整数,并且 n的二进制表示中仅包含 1 个

weixin_45122172的博客 448

Python代码加密与发布方案详解

本文详细介绍了多种Python代码保护方案,从基础加密到高级混淆,以及商业化发布的最佳实践。基础加密方案包括编译为字节码和使用PyArmor基础加密,适合临时保护和小项目。商业级加密方案如Cython编译和Nuitka完整打包,提供更高的保护强度和执行效率。高级混淆方案涉及控制流混淆、字符串加密和完整混淆工具链,进一步增加逆向难度。商业化发布方案则强调许可证系统集成、硬件绑定保护和完整发布流程。此外,文章还探讨了反逆向技术、最佳实践建议和常见问题解决方法。通过组合使用这些技术,可以构建出适合不同安全需求的P

数据知道的博客 1万+

用生成式AI自动生成测试用例的完整教程

本文旨在帮助测试工程师、开发人员快速掌握“生成式AI自动生成测试用例”的核心技术,覆盖从概念理解、工具选择到实战落地的全流程。无论是Web应用、API接口还是移动端功能测试,你都能找到可复用的方法。本文将按照“概念→原理→实战→避坑”的逻辑展开:先通过生活案例理解生成式AI如何生成测试用例,再拆解核心算法原理,接着用Python代码演示完整生成流程,最后分享实际应用中的优化技巧和未来趋势。生成式AI:能“创造内容”的AI模型(如ChatGPT、CodeLlama),像会写作文的智能笔。测试用例。

AIGC应用创新大全的博客 1580

【位运算】判断n是否为2的幂次

文章目录问题描述位运算解法1、n & (n - 1) == 02、n & (-n) == n3、异或运算 问题描述 位运算解法 一个数是2的幂,当且仅当该数为正整数且其二进制表示中仅包含一个1。因此可以将最低位1提取出来后判断剩余位置数值是否为0即可解出该题 1、n & (n - 1) == 0 例如: 16 & 15 = 10000 & 01111 = 0 15 & 14 = 01111 & 01110 != 0 代码如下: class

weixin_45729934的博客 1495

[毕设项目-大模型微调]现代文翻译文言文【基于LLaMA3.1-8B微调】

教你基于LLaMA3.1-8B微调如何做到现代文翻译文言文

逐梦苍穹的博客 2296

【奇巧淫技 - 位运算】(与& 01)判断一个正整数是否是2的整数幂

文章目录前言一、题目二、题解思路:代码:相关链接 前言 上一篇写完了常用类BigInteger的常用方法,碰巧看到一个有意思的题目,刚好还可以用一下BigInteger,所以就写了这一篇 一、题目 题目:判断一个正整数是否是2的整数幂(如4是2的2次方,返回true;5不是2的整数次幂,则返回false)。要求性能尽可能高。 二、题解 思路: 我这边一共有三种解决方式,分别是乘法、除法、位运...

长生的梦呓 661

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

判断输入的一个非负的正整数,其是否是2的幂

/** 判断输入的一个非负的正整数,其是否是2的幂 */ #include #include #include using namespace std; #define max -1 /** 方法1 、 对2的幂进行判断,如 1、10、100、1000....(二进制数)这些只用高位为 1 , 如何确定高位 为 1 是解题的关键。 对一数 M = 10

leo115的专栏 1750

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

判断一个正整数是否是2的整数次幂???

判断一个正整数是否是2的整数次幂??? ​ 实现一个方法,来判断一个正整数是否是2的整数次幂(如16是2的4次方,返回 true;18不是2的整数次幂,则返回false)。 法一:暴力法 思路: 1.变量temp从1一直以2次幂增加,当增加到temp = target就返回true; 2.如果temp > target直接返回false; public boolean funV1(int a) { int temp=1; //迭代变量,从1开始 whil

《落程魄序》作者“落魄哥”的博客 1169

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何判断一个正整数是否是2的乘方

实现一个方法,判断一个正整数是否是2的乘方(比如16是2的4次方,返回True;否则返回False) 方法一:从1开始循环乘以2,直到结果第一次大于或者等于目标值,如果相等,则放回True,如果大于,则返回False 方法二:使用该数循环除以2,如果最终商是1并且余数是0,则返回True;循环中一旦出现余数不为0,则返回False 方法三:借助位运算 如果该数是2的乘方,则该数的二进制表示

Coding家园! 2947

判断正整数是否为2的某次幂,且是否为4的某次幂

题目:判断正整数是否为2的某次幂,且是否为4的某次幂 解题思路:先判断1,为2的0次幂 当不是1时,将该数不断除以2,当出现奇数时就退出,并给出否定(除了1以外),若一直到出现1都全是偶数的话,那么就是2的某次幂。具体几次幂可以在循环中加入变量累计。而2的偶数次幂就必定为4的某次幂,即当一个数为2的2k次幂时,也是4的k次幂,由此可同时判断是否为4的某次幂。 具体代码如下: import java...

建希的博客 263

C++的“位运算”魔术:判断一个数是否为2的幂

本文介绍了判断一个整数是否为2的幂的高效方法。首先通过循环除法实现基本判断,但效率较低。关键突破在于利用二进制特性:2的幂在二进制中只有1个"1"。通过位运算n & (n-1)可以快速判断,若结果为0则是2的幂。这种方法无需循环,仅需一次位运算和比较,效率极高。文章还提供了C++代码示例,并建议使用调试器观察二进制运算过程,帮助理解位运算原理。

weixin_42107409的博客 908

快速判断正整数是否为某个数的幂

1.判断正整数是否为2的n次幂 将2的幂次方写成二进制形式后,很容易就会发现最高位只有一个1,并且1后面跟了n个0。如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零((x & x- 1) == 0)。 public static boolean isPowerOfTwo(int x) { return x

ae5555的专栏 1256

判断一个数是否为2的幂

描述 判断一个数是否是2的幂。 二进制处理 如果一个数nnn是2的幂,则nnn毕竟是正整数,而且nnn的二进制表示中有且仅有一个1。 因此,可以考虑使用位运算,将nnn的二进制表示中最低位的那个1提取出来,再判断剩下的数值是否为0即可。 这里介绍两种常见的处理二进制表示中最低位的方法。 n&(−n)n \& (-n)n&(−n) 其中&\&&表示按位与运算。已知n是正整数,则 −n-n−n 就是nnn的相反数,为负数。这个方法可以直接获取nnn二进制表示的最低

ShenDW818的博客 2057

java 如何判断一个数是否为2的整数次幂以及是2的多少次方(整数幂)?

写在前面,此处不考虑负数!!! 如何简洁快速的判断一个正整数是否是2的整数次幂,以及如果是整数次幂,是多少次幂?方法非常简单。 话不多说,先上代码; public static int isTimesTwo(int n) throws Exception { if(!(n > 0 && (n & (n - 1)) == 0)){ throw new Exception("参数有误,不是2的整数次幂"); } return

行者 3973

几个正整数常用的位运算操作

位运算在高性能计算、资源敏感型场景(如嵌入式系统)、特定算法(加密、压缩)中具有不可替代的优势。合理使用位运算可以显著提升代码效率和资源利用率。

weixin_40102543的博客 847

vb怎么判断整数_判断一个数是否为2的整数次幂

判断一个正整数是否是2的整数幂(如4是2的2次方,返回true;5不是2的整数次幂,则返回false)。要求性能尽可能高。 第一种考虑(乘法)创建一个中间变量temp,初始值是1,然后进入一个循环,每次循环都让temp和目标值进行比较,如果相等,则说明目标是2的整数次幂,如果不相等,则让temp乘以2,继续循环比较,直到temp的值大于目标整数时,说明整数不是2的整数次幂。比如:181*2=2;2...

weixin_39639049的博客 861

面试官:判断一个数是否为2的整数次幂

判断一个正整数是否是2的整数幂(如4是2的2次方,返回true;5不是2的整数次幂,则返回false)。要求性能尽可能高。第一种考虑(乘法)创建一个中间变量temp,初始值是1,然后进入一个循环,每次循环都让temp和目标值进行比较,如果相等,则说明目标是2的整数次幂,如果不相等,则让temp乘以2,继续循环比较,直到temp的值大于目标整数时,说明整数不是2的整数次幂。比如:181*2=2;2比...

weixin_40108469的博客 1523

LeetCode题解:判断一个数是否为2的整数次幂——位运算的妙用

判断一个数是否为2的整数次幂 题目:实现一个方法,来判断一个正整数是否是2的整数次幂(如16是2的4次方,返回true;18不是2的整数次幂,则返回false)。要求性能尽可能高。 暴力法 创建一个中间变量temp,初始值为1。然后进入一个循环,每次循环都让temp和目标进行比较,如果相等则是整数2的整数次幂;如果不相等则让temp增大1倍,继续循环并进行比较。当temp的值大于目标整数时,说明目标整数不是2的整数次幂。 时间复杂度:O(logn) 位运算的妙用 步骤: 将待判断的整数转换成二进制,十

your_棒棒糖的博客 840
上一篇: “1000瓶药水,其中至多有1瓶剧毒,小狗服完药20小时后才能判断是否中毒。现在给你10只小狗、在24小时内、通过小狗试药的方式找出哪瓶药有毒或者全部无毒”
下一篇: “由各种字母组成的字符串S,另外一个字母数相对少一些的字符串T,设法最快的查出是否T中的字母均在S中?”
CodeArhat
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值