Lua:检测位字段中的上升/下降沿

Lua:检测位字段中的上升/下降沿,lua,bit-manipulation,edge-detection,Lua,Bit Manipulation,Edge Detection,我调用了一个函数,它返回一个整数,表示16个二进制输入的位域,每个颜色可以是开的,也可以是关的 我试图创建一个函数来获取旧状态和新状态之间的变化 e、 g 我尝试过从新颜色中减去旧颜色,从旧颜色中减去新颜色,但是如果超过1个值发生变化,这似乎会导致混乱 这是为了检测来自多个输入的上升/下降沿 **编辑:似乎有一个 发件人: (这里应该有一个值表,但我无法计算出标记的语法,似乎stackoverflow忽略了标准的html部分。)Lua没有按位运算符。如果您可以选择使用第三方库,请参阅以下概述:。

我调用了一个函数,它返回一个整数,表示16个二进制输入的位域,每个颜色可以是开的,也可以是关的

我试图创建一个函数来获取旧状态和新状态之间的变化

e、 g

我尝试过从新颜色中减去旧颜色,从旧颜色中减去新颜色,但是如果超过1个值发生变化,这似乎会导致混乱

这是为了检测来自多个输入的上升/下降沿

**编辑:似乎有一个

发件人:


(这里应该有一个值表,但我无法计算出标记的语法,似乎stackoverflow忽略了标准的html部分。)

Lua没有按位运算符。如果您可以选择使用第三方库,请参阅以下概述:。。。事实上,如果您使用的是Lua5.2,那么其中一个应该包括在内。如果不是5.2,则似乎有一个子集,我将其添加到问题中,但我仍然迷路了。Lua没有按位运算符。如果您可以选择使用第三方库,请参阅以下概述:。。。事实上,如果您使用的是Lua5.2,那么其中一个应该包括在内。如果不是5.2,则似乎有一个子集,我将其添加到问题中,但我仍然迷路了。
function getChanges(oldColors,newColors)

  sampleOutput = {white = "",orange="added",magenta="removed" .....}
  return sampleOutput
end
colors.white     1       0x1     0000000000000001
colors.orange    2       0x2     0000000000000010
colors.magenta   4       0x4     0000000000000100
colors.lightBlue 8       0x8     0000000000001000
colors.yellow    16      0x10    0000000000010000
colors.lime      32      0x20    0000000000100000
colors.pink      64      0x40    0000000001000000
colors.gray      128     0x80    0000000010000000
colors.lightGray 256     0x100   0000000100000000
colors.cyan      512     0x200   0000001000000000
colors.purple    1024    0x400   0000010000000000
colors.blue      2048    0x800   0000100000000000
colors.brown     4096    0x1000  0001000000000000
colors.green     8192    0x2000  0010000000000000
colors.red       16384   0x4000  0100000000000000
colors.black     32768   0x8000  1000000000000000
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