luajitもbit演算できるんか

　
この記事は[アドカレ](https://qiita.com/advent-calendar/2022/lua)に参加しています。

# luajitでもbit演算できるらしい
先日、[19日目の記事](https://zenn.dev/uga_rosa/articles/5c6272ab8db9a1)を読みました。なんか、luajitでもbit演算できるみたいですね。

ところで、aviutlの独自関数にもSHIFTというものがあります。

同じ機能、、、

高速化手段、、、

準備に手間がかからない、、、

簡単、、、

そう、時間を計測してどっちが速いのか確かめたくなりますね。

## コード
コードを以下に示します。
テキストボックスにコピペすると、patch.aulのコンソールに計測結果が表示されます。
```lua
<?
local t1,t2
local d=require("M_Blur_Module")


t1=d.time()--normal計測開始

local a=1
for i=0,100000 do
a=a*256
a=a/256
end

t2=d.time()--normal計測終了
local TIME=t2-t1
debug_print(a)
debug_print(string.format("normal : %f[ms]",TIME))


t1=d.time()--aviutl計測開始

local a=1
for i=0,100000 do
a=SHIFT(a,8)
a=SHIFT(a,-8)
end

t2=d.time()--aviutl計測終了
local TIME=t2-t1
debug_print(a)
debug_print(string.format("aviutl : %f[ms]",TIME))


t1=d.time()--luajit計測開始

local bit=require("bit")

local a=1
for i=0,100000 do
a=bit.lshift(a,8)
a=bit.rshift(a,8)
end

t2=d.time()--luajit計測終了
local TIME=t2-t1
debug_print(a)
debug_print(string.format("luajit : %f[ms]",TIME))

debug_print("\n")
?>
```

## 結果
普通の演算、SHIFT関数、bit.~の順番に表示されるので、その結果の一部を以下に示します。
```
patch.aul
[20:28:03]      1
[20:28:03]      normal : 0.471600[ms]
[20:28:03]      1
[20:28:03]      aviutl : 7.597200[ms]
[20:28:03]      1
[20:28:03]      luajit : 0.121300[ms]
[20:28:03]

[20:28:04]      1
[20:28:04]      normal : 0.362400[ms]
[20:28:04]      1
[20:28:04]      aviutl : 5.965100[ms]
[20:28:04]      1
[20:28:04]      luajit : 0.181900[ms]
[20:28:04]

[20:28:04]      1
[20:28:04]      normal : 0.264100[ms]
[20:28:04]      1
[20:28:04]      aviutl : 5.277200[ms]
[20:28:04]      1
[20:28:04]      luajit : 0.275000[ms]
[20:28:04]

[20:28:05]      1
[20:28:05]      normal : 0.355300[ms]
[20:28:05]      1
[20:28:05]      aviutl : 5.236900[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.192200[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.377300[ms]
[20:28:05]      1
[20:28:05]      aviutl : 5.495800[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.268300[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.364400[ms]
[20:28:05]      1
[20:28:05]      aviutl : 5.702700[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.204600[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.356200[ms]
[20:28:05]      1
[20:28:05]      aviutl : 5.459700[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.246400[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.359800[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.340700[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.164700[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.448500[ms]
[20:28:05]      1
[20:28:05]      aviutl : 6.729800[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.156100[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.329900[ms]
[20:28:05]      1
[20:28:05]      aviutl : 6.056100[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.191300[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.500800[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.507000[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.168000[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.526800[ms]
[20:28:05]      1
[20:28:05]      aviutl : 6.608800[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.179300[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.549300[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.195000[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.158800[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.393800[ms]
[20:28:05]      1
[20:28:05]      aviutl : 6.150200[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.183900[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.409400[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.438400[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.163300[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.522100[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.759400[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.203800[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.496600[ms]
[20:28:05]      1
[20:28:05]      aviutl : 9.940500[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.154200[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.357300[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.445300[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.165500[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.476500[ms]
[20:28:05]      1
[20:28:05]      aviutl : 8.427600[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.167600[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.557000[ms]
[20:28:05]      1
[20:28:05]      aviutl : 8.452300[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.169400[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.500100[ms]
[20:28:05]      1
[20:28:05]      aviutl : 8.896800[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.176800[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.503100[ms]
[20:28:05]      1
[20:28:05]      aviutl : 8.418200[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.140100[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.600300[ms]
[20:28:05]      1
[20:28:05]      aviutl : 8.284200[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.200100[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.494000[ms]
[20:28:05]      1
[20:28:05]      aviutl : 8.328000[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.145800[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.385900[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.974600[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.174700[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.410800[ms]
[20:28:05]      1
[20:28:05]      aviutl : 6.615500[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.160600[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.494300[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.241100[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.144100[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.479600[ms]
[20:28:05]      1
[20:28:05]      aviutl : 8.411200[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.169900[ms]
[20:28:05]

[20:28:05]      1
[20:28:05]      normal : 0.451300[ms]
[20:28:05]      1
[20:28:05]      aviutl : 7.938900[ms]
[20:28:05]      1
[20:28:05]      luajit : 0.138800[ms]
[20:28:05]

[20:28:06]      1
[20:28:06]      normal : 1.403000[ms]
[20:28:06]      1
[20:28:06]      aviutl : 7.887800[ms]
[20:28:06]      1
[20:28:06]      luajit : 0.182800[ms]
[20:28:06]
```
　
やはりluajitは速いですね～
SHIFT関数が遅いのは、aviutlのデフォルト状態(lua5.1)に比べると速いとか、そんなかんじなんですかね…

## さいごに
みなさんluajitを使いましょう…………と言いたいところですが、どうやらlua5.4が意外と速いらしいですね。僕の手元にlua5.4環境がないので、時間があるときに試してみたいです。([aviutlではlua5.4を使用できない](https://scrapbox.io/ePi5131/%E3%80%90%E8%BF%B7%E4%BF%A1%E3%80%91AviUtl%E3%82%92Lua_5.4%E3%81%A7%E9%AB%98%E9%80%9F%E5%8C%96%E3%81%99%E3%82%8B)ので、別途でプログラムを書く必要がありそう？)