0

Java では、次の左シフト操作を行うと、整数/長いオーバーフローのために負の結果が得られます: 0xAAAAAAA << 7 で -183251938048 が得られます

しかし、Lua では、すべてが 52 ビット浮動小数点の Lua 番号であるためです。左シフト時にオーバーフローをトリガーできません: bit_lshift(0xAAAAAAA,7) は私に 1431655680 を与えます

Lua で 32 ビット符号付き整数をシミュレートするにはどうすればよいですか??

4

3 に答える 3

1

これを言って荒らしと見なされないことを願っていますが、Lua から Java をシミュレートする最善の方法は、Lua から Java を使用することです。

Java をエミュレートする必要がある場合、Lua が既に Java に組み込まれている可能性があります。Java のバイナリ操作を Lua プログラムに公開するだけで、それを使用できるようになります。

于 2012-04-27T06:56:07.627 に答える
1

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 を実行して得たものであるため (また、「プログラミング電卓」でも実行して)、負の数を取得した方法がわかりません。

于 2012-04-26T13:41:45.153 に答える
1

これを処理するいくつかの C 関数を作成し、Lua にエクスポートします。

ただし、一般的には、Lua コードはこのような低レベルのものに触れるべきではありません。

于 2012-04-26T10:35:02.433 に答える