请问如何在 Lua 中设置或重置位?

我想在一个数字中执行特定位的设置和重置。由于我使用的是Lua 5.1,因此不能使用API和移位运算符,所以问题变得更加复杂,请帮助我找到解决方法。

点赞
用户8621712
用户8621712

bit 库随固件一起发布。

阅读文档:https://nodemcu.readthedocs.io/en/release/modules/bit/

2020-11-12 10:33:47
用户3342050
用户3342050

你可以不用外部库来完成,只要你知道要翻转的位的位置。

#! /usr/bin/env lua

local hex  = 0xFF
local maxPos  = 7

local function toggle( num, pos )
    if pos < 0 or pos > maxPos then print( '请选取一个有效的位置,0-' ..maxPos )
    else
        local bits = {}  --  创建一个空表
        for i=1, maxPos do bits[i] = false end

        for i = maxPos, pos +1, -1 do  --  暂时排除高位的数值
            if num >= 2 ^i then
                num = num -2 ^i
                bits [i +1] = true
            end
         end

        if num >= 2 ^pos then  num = num -2 ^pos  -- 翻转目标位
        else                   num = num +2 ^pos
        end

        for i = 1, #bits do  -- 重新加回高位的数值
            if bits[i] then num = num +2 ^(i -1) end
        end

    end ; print( '当前数值:', num )
    return num
end

原先数值: 255

当前数值: 127

请选取一个有效的位置,0-7

当前数值: 127

当前数值: 255

2020-11-12 12:26:24