You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测位掩码整数中特定位状态并转换为布尔数组(JS/Python/LUA实现)

如何检测位掩码整数中特定位状态并转换为布尔数组(JS/Python/LUA实现)

你说的思路完全没问题,位掩码就是靠2的幂次来区分各个布尔状态的,下面我给你整理JS、Python、Lua里的具体实现方法,都是最简单直接的通用方案:

一、检测特定位是否开启

核心逻辑用**按位与(&)**操作:把目标整数和对应位的掩码(2的幂次)做按位与,如果结果非零,说明该位是开启的(true),否则是关闭的(false)。注意别写成x &= mask,那是赋值操作,我们需要的是比较结果。

JavaScript实现

// 检测num中是否包含mask对应的位
function hasBit(num, mask) {
    return (num & mask) !== 0;
}

// 示例:
console.log(hasBit(9, 1));  // 9是1+8,包含1 → true
console.log(hasBit(9, 4));  // 9不包含4 → false
console.log(hasBit(7, 2));  // 7是1+2+4,包含2 → true

Python实现

# 检测num中是否包含mask对应的位
def has_bit(num, mask):
    return (num & mask) != 0

# 示例:
print(has_bit(9, 1))   # True
print(has_bit(9, 4))   # False
print(has_bit(7, 2))   # True

Lua实现

-- 检测num中是否包含mask对应的位
function hasBit(num, mask)
    return (num & mask) ~= 0
end

-- 示例:
print(hasBit(9, 1))   -- true
print(hasBit(9, 4))   -- false
print(hasBit(7, 2))   -- true

二、转换为布尔数组

如果需要把整数转换成[true, false, ...]这样的布尔数组(数组索引对应位的位置,索引0对应20=1,索引1对应21=2,以此类推),可以循环遍历每一位,用上面的检测方法生成数组。

JavaScript实现

// 将num转换为包含bitCount位的布尔数组
function toBitArray(num, bitCount) {
    const bitArray = [];
    for (let i = 0; i < bitCount; i++) {
        // 2**i 就是第i位的掩码(2的i次方)
        bitArray.push(hasBit(num, 2 ** i));
    }
    return bitArray;
}

// 示例:
console.log(toBitArray(9, 4));  // [true, false, false, true](对应1、8开启)
console.log(toBitArray(7, 4));  // [true, true, true, false](对应1、2、4开启)

Python实现

# 将num转换为包含bit_count位的布尔数组
def to_bit_array(num, bit_count):
    # 1 << i 等价于2**i,位运算更高效
    return [(num & (1 << i)) != 0 for i in range(bit_count)]

# 示例:
print(to_bit_array(9, 4))   # [True, False, False, True]
print(to_bit_array(7, 4))   # [True, True, True, False]

Lua实现

-- 将num转换为包含bitCount位的布尔数组
function toBitArray(num, bitCount)
    local bitArray = {}
    for i = 0, bitCount - 1 do
        table.insert(bitArray, hasBit(num, 2^i))
    end
    return bitArray
end

-- 示例:
local arr1 = toBitArray(9, 4)
for _, val in ipairs(arr1) do print(val) end  -- 输出true、false、false、true
local arr2 = toBitArray(7, 4)
for _, val in ipairs(arr2) do print(val) end  -- 输出true、true、true、false

小技巧

为了代码可读性更好,建议把每个位的掩码定义成常量,比如:

// JS示例
const FLAG_FIRST = 1;    // 第0位
const FLAG_SECOND = 2;   // 第1位
const FLAG_THIRD = 4;    // 第2位
const FLAG_FOURTH = 8;   // 第3位

这样使用的时候直接写hasBit(num, FLAG_THIRD),比写数字4更直观。

备注:内容来源于stack exchange,提问作者MirceaKitsune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:58:03