Lua:检测位域中的上升/下降沿
2013-4-20 19:50:7
收藏:0
阅读:181
评论:1
我正在调用一个返回一个整数的函数,该整数表示16个二进制输入的位域,每个颜色都可以打开或关闭。
我正在尝试创建一个函数来获取旧状态和新状态之间的差异,
例如
function getChanges(oldColors,newColors)
sampleOutput = {white = "",orange="added",magenta="removed" .....}
return sampleOutput
end
我已经尝试将旧颜色从新颜色中减去以及将新颜色从旧颜色中减去,但是这似乎会导致混乱,如果超过1个值发生变化。
这是为了检测多个输入的上升/下降沿。
\ **\ *编辑:似乎有[lua位API的子集]可用(http://computercraft.info/wiki/Bit_(API))
来自: [ComputerCraft wiki](http://computercraft.info/wiki/Colors_(API))
颜色.白色 1 0x1 0000000000000001
colors.orange 2 0x2 0000000000000010
颜色.洋红 4 0x4 0000000000000100
colors.lightBlue 8 0x8 0000000000001000
颜色。黄色 16 0x10 0000000000010000
颜色。青柠檬 32 0x20 0000000000100000
颜色。粉红色 64 0x40 0000000001000000
颜色。灰色 128 0x80 0000000010000000
颜色。浅灰色 256 0x100 0000000100000000
颜色。青色 512 0x200 0000001000000000
颜色。紫色 1024 0x400 0000010000000000
颜色。蓝色 2048 0x800 0000100000000000
颜色。棕色 4096 0x1000 0001000000000000
颜色。绿色 8192 0x2000 0010000000000000
colors.red 16384 0x4000 0100000000000000
颜色。黑色 32768 0x8000 1000000000000000
(这里原来应该有一个值表,但我无法弄清楚markdown的语法,这似乎忽略了标准的HTML部分。)
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
```lua function getChanges(oldColors,newColors) local added = bit.band(newColors, bit.bnot(oldColors)) local removed = bit.band(oldColors, bit.bnot(newColors)) local color_names = { white = 1, orange = 2, magenta = 4, lightBlue = 8, yellow = 16, lime = 32, pink = 64, gray = 128, lightGray = 256, cyan = 512, purple = 1024, blue = 2048, brown = 4096, green = 8192, red = 16384, black = 32768 } local diff = {} for cn, mask in pairs(color_names) do diff[cn] = bit.band(added, mask) ~= 0 and 'added' or bit.band(removed, mask) ~= 0 and 'removed' or '' end return diff end将旧颜色和新颜色作为参数传递给 "getChanges" 函数。函数使用 Lua 中的位操作 "bit.band" 和 "bit.bnot" 执行按位与和取反操作,以获取添加和删除的颜色。颜色名称和它们的二进制掩码存储在一个表中。函数生成一个名为 "diff" 的新表,其中包含颜色名称和对应的 "added"、"removed" 或空字符串值。最后,函数返回 "diff" 表。