关于位运算实现布尔数组全组合算法的逻辑疑问
位运算生成布尔数组全组合原理解析
核心逻辑可以从以下几个维度理解:
- 长度为n的布尔数组,全组合总数为2ⁿ,刚好对应0~2ⁿ-1范围内的所有整数,每个整数的n位二进制表示,每一位的0/1值刚好可以对应布尔数组对应位置的
false/true值,所有整数的二进制位恰好覆盖了所有0/1的排列组合。 - 关键代码
(y >> x) & 1的作用拆解:- 右移运算
y >> x:把y的二进制表示整体向右移动x位,原本处于第x位的二进制位会被移动到最低位(第0位)的位置 - 按位与运算
& 1:二进制的1只有最低位是1,其他位都是0,和移位后的结果做按位与运算时,只会保留最低位的数值,其余位全部清零,最终得到的结果就是y的二进制表示中第x位的原值(0或1) - 判定规则:结果为1对应布尔值
true,结果为0对应布尔值false,即可把y的每一位二进制值映射为布尔数组的对应位置元素。
- 右移运算
你给出的n=2的运行示例刚好符合这个映射逻辑:
0~3的二进制分别是00、01、10、11,对应四个布尔组合:
- 00 → [false, false]
- 01 → [true, false]
- 10 → [false, true]
- 11 → [true, true]
完整逻辑链为:外层循环遍历0到2ⁿ-1的所有整数,覆盖所有n位二进制排列;内层循环遍历每个整数的每一位二进制位,通过位运算取出每一位的0/1值映射为布尔值,组装成数组,最终就得到了所有布尔数组的组合。
内容的提问来源于stack exchange,提问作者BBrow
相关产品推荐
相关产品推荐

