整数型はデフォルトではC言語のlong longもしくは__int64(Windows)で、コンパイル時に"LUA_32BITS"が定義されているとlong、"LUA_INT_INT"が定義されているとint、"LUA_INT_SHORT"が定義されているとshort intが使用されます。short intはテスト用に用意されているだけで非推奨のようです。
ちなみに、数値型はデフォルトではdoubleで、コンパイル時に"LUA_32BITS"が定義されているとfloat、"LUA_REAL_LONGDOUBLE"が定義されているとlong doubleが使用されます。Lua 5.2ではdoubleが使用されています。
この辺りの詳細は、luaconf.hをご覧ください。
Lua 5.2にあったbit32ライブラリが廃止され、ビット演算子が導入されました。
& 論理積
| 論理和
~ 排他的論理和
<< 左シフト
>> 右シフト
~ 否定
以下、使用例です。
print( 10 & 8 ) --> 8
print( 8 | 1 ) --> 9
print( 255 ~ 15 ) --> 240
print( 8 << 1 ) --> 16
print( 8 >> 1 ) --> 4
print( ~0 ) --> -1
また、整数用の演算子が1つ追加されています。割り切れないときはマイナス方向に丸めるようです。
// 整数除算以下、除算演算子と整数除算演算子の使用例です。
print( 10 / 6 ) --> 1.6666666666667
print( 10 // 6 ) --> 1
print( 10 / 9 ) --> 1.1111111111111
print( 10 // 9 ) --> 1
print( -10 / 9 ) --> -1.1111111111111
print( -10 // 9 ) --> -2
print( 10.0 // 3.0 ) --> 3 ( 10.0と3.0は整数で表現可能なのでOK )
print( 10.5 // 3.0 ) --> エラー! ( 10.5は整数で表現不可能なのでNG )
print( 10.0 // 3.5 ) --> エラー! ( 3.5は整数で表現不可能なのでNG )
数値型が文字列に変換されるときに、小数点以下の数値がゼロのときでも".0"が付加されるようになりました。
-- Lua 5.2
print( 2.0 ) --> 2
print( 2 ) --> 2
-- Lua 5.3
print( 2.0 ) --> 2.0
print( 2 ) --> 2
Lua 5.2と同じ結果を得るには、前述の整数除算演算子を使用するか、5.3で追加されたmath.tointeger関数を使用します。math.tointegerは1つの引数をとり、引数が整数で表現可能であればその整数を返し、整数で表現不可能であればnilを返します。
x = 2.0
xx = math.tointeger( x )
if not xx then
xx = x
end
print( xx ) --> 2
【参照】
Lua 5.3 Reference Manual
http://www.lua.org/work/doc/manual.html
0 件のコメント:
コメントを投稿