Java では、次の左シフト操作を行うと、整数/長いオーバーフローのために負の結果が得られます: 0xAAAAAAA << 7 で -183251938048 が得られます
しかし、Lua では、すべてが 52 ビット浮動小数点の Lua 番号であるためです。左シフト時にオーバーフローをトリガーできません: bit_lshift(0xAAAAAAA,7) は私に 1431655680 を与えます
Lua で 32 ビット符号付き整数をシミュレートするにはどうすればよいですか??
Java では、次の左シフト操作を行うと、整数/長いオーバーフローのために負の結果が得られます: 0xAAAAAAA << 7 で -183251938048 が得られます
しかし、Lua では、すべてが 52 ビット浮動小数点の Lua 番号であるためです。左シフト時にオーバーフローをトリガーできません: bit_lshift(0xAAAAAAA,7) は私に 1431655680 を与えます
Lua で 32 ビット符号付き整数をシミュレートするにはどうすればよいですか??
これを言って荒らしと見なされないことを願っていますが、Lua から Java をシミュレートする最善の方法は、Lua から Java を使用することです。
Java をエミュレートする必要がある場合、Lua が既に Java に組み込まれている可能性があります。Java のバイナリ操作を Lua プログラムに公開するだけで、それを使用できるようになります。
Lua でビット操作ライブラリを探しています。そのようなライブラリの 1 つはbitop
、LuaJIT の作成者によるもので、インストールを必要とせずに直接含まれています。標準の Lua にインストールすることもできます。
もう 1 つのライブラリはbit32
ライブラリで、Lua 5.2 に含まれています。
どちらのライブラリでも、32 ビットの数値を操作できます。たとえば、次のようにしbitop
ます。
local bit = require 'bit
print(bit.lshift(0xAAAAAAAA, 7)) --> 1431655680
1431655680 は、C で (0xAAAAAAA<<7)&0xFFFFFFFF を実行して得たものであるため (また、「プログラミング電卓」でも実行して)、負の数を取得した方法がわかりません。
これを処理するいくつかの C 関数を作成し、Lua にエクスポートします。
ただし、一般的には、Lua コードはこのような低レベルのものに触れるべきではありません。