java:判断二进制数据中第n位是否为1

Java学习手册:(数据结构与算法-位运算)如何判断一个数是否为2的n次方? 算法思想: 方法一:做位移运算,然后判断移位后的值是否与给定的数相等。时间复杂度为O(log n) 方法二:从二进制的表示可以看出,如果一个数是2的n次方,那么这个数对应的二进制表示中只有一位是1,其余位都为0。因此,判断一个数是否为2的n次方可以转换为这个数对应的二进制表示中是否只有一位为1。如果一个数的二进制表示只有一位是1,例如num=00010000,那么num-1的二进制表示为num... 阅读详情

可以使用位运算来判断。

&是位的与运算符,是指二进制数按位“与”的操作, 逻辑与就是两者都为真的时候才为真,其他真假,假真,假假的运算结果都是假。二进制写法如下
1 & 1 = 1 ,  1 & 0 = 0 , 0 & 1 = 0, 0 & 0 = 0

如果想判断十进制数 d 的二进制第n位是否是1,应该用以下的数m来进行&运算

m = 1 << n-1 (n是大于0的整数)  

以上公式
n=1的时候m=1
n=2的时候m=2
n=3的时候m=4
n=4的时候m=8
...

如果同时mask多个位,只需要将m相加即可。
例如第2位和第3位, 将m2+m3 = 2 + 4 = 6


例:获取10的二进制表示中的第2位是否为1:

m= 1 << (2-1) = 2;

10 & 2 二进制是 
1010 
0010 &
————————
0010
结果不是0, 所以说明第二位是1. 



根据boolean设置二进制第n位的值:

  private void setFlag(int mask, boolean b) {
        if (b) {
            flags |= mask;
        } else {
            flags &= ~mask;
        }
    }


拓展学习链接:

位运算

位运算应用技巧

Java位操作方法,位运算实际应用(简单总结)



c语言中使用位与&运算判断一个整数是否是2的n次幂 利用位与 & 运算,判断一个整数是否是2的整数次幂。 分析过程: 二进制数的位权是2的n次方,通过观察发现如果一个数m是2的n(n>=0 )次方,那么它的二进制数的最高位必定为1,其余位都是0; 比如2 -->10 2^2 -->100 2^3 -->1000 2^4 -->10000 这是一些符合要求的m值对应的二进制数 m-1:1 -->01 3 -->011 7 -->0111 15 -->01111 这是一些m-1的值 对应的二 阅读详情

相关推荐

Ubuntu20.04下运行LOAM系列:A-LOAM、LeGO-LOAM、SC-LeGO-LOAM、LIO-SAM 和 LVI-SAM

在我第一篇博文Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM2+Gazebo仿真运行ORB-SLAM2+各种相关库的安装的基础环境下跑通A-LOAM首先已经按照上一篇文章已经安装好了ROS noetic、Eigen3.4.0、OpenCV4.2.0和PCL1.10,A-LOAM在Github的开源地址:https://github.com/HKUST-Aerial-Robotics/A-LOAM。接下来根据代码要求,需要安装Ceres,另外环境的变

zardforever123的博客 3万+

Java 求一个数的二进制第n位是否为1

 很简单。设数为num,将num右移n-1位在&1 ,如果num>>(n-1)&1为1,第n位为1,num>>(n-1)&1为0,第n位为0。  求第1位是否为1则就是 num &1即可。  为何要右移>>(n-1):将第n位数变到个位,这样方便&1运算。&1也是和个位数&。  为何要&1。逻辑& : 0&0 = 0 , 0&1 =0 , 1&1 = 1;只有1&1

tanxinji的博客 2112

具身智能的建模和方法(具身智能入门一)

本文以机械臂将小红方块移动到目标位置为例对具身智能的建模和方法进行介绍,如下图所示,该例子来自https://ai-workshops.github.io/building-and-working-in-environments-for-embodied-ai-cvpr-2022/。

weixin_39699362的博客 1457

判断二进制数据中第n位是否为1

N:待判断的二进制数 B:待判断的位(右往左) 结果:((N>>(B-1))&1

凯 1万+

移远EC800M CAT1模块HTTP POST实战:从AT指令到数据上报的完整避坑指南

本文详细介绍了移远EC800M CAT1模块通过AT指令实现HTTP POST数据上报的完整开发流程,包括模块初始化、PDP上下文配置、HTTP POST实现及优化策略。针对实际开发中的常见问题如网络异常、低功耗需求等提供了经过验证的解决方案,帮助开发者快速实现稳定可靠的物联网数据传输功能。

weixin_42556197的博客 468

SAP预扣税配置实战:从BP创建到外部接口集成的完整流程

本文详细拆解了SAP S/4HANA中预扣税配置与集成的完整实战流程。内容涵盖从业务伙伴(BP)架构下的数据存储理解、后台基础配置,到针对批量处理场景,如何绕过标准BAPI,采用直接更新核心表LFBW的策略进行高效开发。最后,文章探讨了与外部接口集成的多种模式与数据流设计,为财务顾问和ABAP开发人员提供了一套清晰、可落地的解决方案。

weixin_29204749的博客 409

如何判断Int型值的第nbit位是否是1还是0

我们知道:int型值占4个字节,32bit。     权值 Math.pow(2, 31) …… Math.pow(2, n-1) …… 8 4 2 1 Bit位数 n=32 …… n …… 4 3 2

hfreeman2008的专栏 6792

《通信工程施工与管理》

制作馈线接头必须使用专用的工具,专用工具包括:馈线切割刀、馈线安全刀、小金属丝毛刷、固定尺寸或大号活动扳手、小号扁锉刀、细齿小手锯、接头扩孔器、3M防水胶或防水接头盒;如图所示,详情如表所示。

2302_78710464的博客 1648

java左移与右移运算符

1左移(<<)n位相当于乘以2的n次方 1 << 1 = 2 10 << 1 = 20 10 << 2 = 40 2.同理,右移(>>)n位相当于乘除以2的n次方 1 >> 1 = 1/2 10 >> 1 = 5 20 >> 1 = 10 20 >> 2 = 5

vcoy的博客 482

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

Robot_PLC_HMI_Automation 1万+

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测 目录时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测基本介绍ARIMAXVARVARMAVARMAXSESHWES参考资料 基本介绍 本文介绍ARIMAX、VAR、VARMA和VARMAX基本概念及其Python程序设计。 ARIMAX 具有外源回归量的自回归整合移动平均值(ARIMAX)是 ARIMA 模型的扩展,其还包括外生变量的建模。 外生变量也称为协变量,可以被认为是并行输入序列,其在与

前程算法屋的博客 6682

python按位异或运算符_Python 进制转换、位运算,深入理解按位异或运算符,java:判断二进制数据中第n位是否为1...

一、进制转换编程用十进制,十进制转换为二进制、八进制、十六进制In [135]: bin(23)Out[135]: '0b10111'In [136]: oct(23)Out[136]: '0o27'In [137]: hex(23)Out[137]: '0x17'也可以直接反向获取十进制In [146]: 0b10111Out[146]: 23In [147]: 0o27Out[147]: 23...

weixin_39583013的博客 600

【Matlab】刃边法计算mtf

摘要:刃边法是一种测量光学系统调制传输函数(MTF)的常用方法。本文介绍了基于Matlab的MTF计算实现方案,包括图像灰度化、梯度计算、刀口方向选择、梯度投影等关键步骤,并给出了完整的代码实现。该方案可通过添加图像预处理、多方向计算、函数封装等方式进行扩展,提高MTF计算的准确性和实用性,适用于不同应用场景的光学系统性能评估需求。(148字)

unber的博客 383

JZ11:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。

题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 过程 Java自带转化方法嘻嘻嘻嘻 1、先将数字转换成二进制字符串 2、用String.split()函数存入一个数组中 3、遍历数组跟1比较,同时计数 4、输出计数值 public class Solution { public int NumberOf1(int n) { String bi = Integer.toBinaryString(n); String[] b =

coderge's CSDN Blog. 1619

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算一个数的二进制的1的个数

三种计算一个数的二进制中1的个数的方法

talk less, code more 1406

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【leetcode刷题】68.前 n 个数字二进制中 1 的个数 ——Java版

dp

公号:一条coding 1万+

位运算的妙用_判断2的乘方和二进制1的个数

本来定好每个星期写一遍算法的博客的,可是因为最近赶项目,博客停止更新一段时间了,现在抽空继续更新。本来心情挺好的,一看手机,欠费两百多,真是日了狗了,百度云没有设置只能 wifi 下下载和上传,用了我的流量来下载,我的内心是崩溃的。 一、判断一个整数是否是2的乘方1.题目:实现一个方法,判断一个正整数是否是2的乘方(比如 16 是 2 的 4 次方,返回 True;18 不是 2 的乘方,返回 F

GitHubClub 3001

《剑指Offer》面试题15. 二进制中 1 的个数

题目描述 面试题15. 二进制中1的个数 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 000000000000000000000000000...

iqqcode 871

Java编程题:生成n位格雷码

链接:https://www.nowcoder.com/questionTerminal/50959b5325c94079a391538c04267e15 来源:牛客网 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。 给定一个整数n,请返回n位的格雷码,顺序为从0开始。 测试样例: 1 返回...

长不大的大灰狼 373

蓝桥 二进制中1的个数 JAVA

请实现一个函数,输入一个整数,输出该数二进制表示中1的个数 例如:9的二进制表示为1001,有2位是1 先看结果:输入9 输出它的二进制 运用位运算方法&与,得出1有两位 9 1001 2 2 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = sc...

高瑜的博客 4380

Java判断一个数是否是2的n次幂

二进制中n一旦是2的幂次方(只出现一个1),必为10,100,1000,10000,100000,…形式; 并且n-1为01,011,0111,0111,01111形式。 方法:n,n-1两个数按位与&等于零,则为2的幂次方 class Solution { public boolean isPowerOfTwo(int n) { return n > 0 &&...

weixin_42956047的博客 3131

力扣 1016. 子串能表示从 1 到 N 数字的二进制串

1016. 子串能表示从 1 到 N 数字的二进制串 难度中等19收藏分享切换为英文关注反馈 给定一个二进制字符串S(一个仅由若干'0' 和 '1' 构成的字符串)和一个正整数N,如果对于从1到N的每个整数X,其二进制表示都是S的子串,就返回true,否则返回false。 示例 1: 输入:S = "0110", N = 3 输出:true 示例 2: 输入:S = "0110", N = 4 输出:false 提示: 1 <= S.leng...

qq_41723573的博客 280
上一篇: springmvc文件上传
下一篇: ngix配置入门
Vio_ao
博客等级 码龄14年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值