C++中条件语句if(n & 1 << b)的含义及逻辑解析
理解
if (n & 1 << b)的条件判断逻辑 嘿,我来帮你拆解这个看起来有点陌生的条件语句!其实它是一个很常用的二进制位判断技巧,咱们一步步来理清楚:
第一步:明确操作符优先级
首先要注意,C++里左移操作符<<的优先级比按位与&高,所以这个表达式其实等价于:
if (n & (1 << b))
先计算1 << b,再把结果和n做按位与操作。
第二步:拆解1 << b的含义
1 << b是把数字1的二进制表示向左移动b位,最终得到的是一个只有第b位为1,其余所有位都是0的整数。举几个例子:
- 当
b=0时,1<<0 = 1,二进制是000...0001 - 当
b=2时,1<<2 = 4,二进制是000...0100 - 当
b=5时,1<<5 = 32,二进制是000...100000
第三步:按位与&的作用
按位与操作的规则是:两个二进制位都为1时,结果为1;否则为0。
当我们把n和1<<b的结果做按位与时:
- 如果
n的第b位是1,那么按位与的结果就是1<<b(非零值),在if判断中会被视为true - 如果
n的第b位是0,那么按位与的结果就是0,在if判断中会被视为false
换句话说,这个条件语句的核心作用就是:判断整数n的二进制表示中,第b位(从0开始计数)是否为1。
举个实际例子验证
比如n=5(二进制是101):
- 当
b=0:1<<0=1,5&1=1(非零),条件成立→第0位是1 - 当
b=1:1<<1=2,5&2=0,条件不成立→第1位是0 - 当
b=2:1<<2=4,5&4=4(非零),条件成立→第2位是1
另外,你可能还会看到等价的写法if ((n >> b) & 1)——把n右移b位后和1按位与,同样是判断第b位是否为1,两种写法都很常用,看个人习惯。
内容的提问来源于stack exchange,提问作者user9267359
相关产品推荐
相关产品推荐

