「API/Bit」の編集履歴(バックアップ)一覧はこちら
「API/Bit」(2014/01/14 (火) 01:03:55) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
このページではBit APIについて解説する。
参考資料:
-[[Bit API>http://computercraft.info/wiki/index.php?title=Bit_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.58 for Minecraft 1.6.4
----
#contents
----
*Bit API
数値のビット操作に関するAPI。
Lua自体はビット演算子を持たないが、このAPIを利用すればビットフラグなども簡単に操作することができる。
数値を2進数32bitの整数としてビット操作する。小数を含む数値や、32bit(4,294,967,295)を超える数値を指定するとエラーとなる。
数値は32bit符号なし整数(0~4,294,967,295)として扱われる(例:-1 → 4294967295)。
【1.42-】CC1.41以前のLuaによる実装からJava側での実装に変更され、bit.tobits関数とbit.tonumb関数が削除された。
【1.42-】dan200.computer.core.apis.BitAPI で定義
【-1.41】lua\rom\apis\bit で定義
**bnot
-bit.bnot(&i(){n})
-&i(){n}(数値)のビット単位の論理否定(NOT)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0 → 1
1 → 0
例:
print( bit.bnot( 18 ) )
18(2進数:10010)のビット単位NOTを求め、結果を表示する。
4294967277(2進数:11111111111111111111111111101101)が表示される。
**band
- bit.band(&i(){m}, &i(){n})
-&i(){m}(数値)と&i(){n}(数値)のビット単位の論理積(AND)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0, 0 → 0
1, 0 → 0
0, 1 → 0
1, 1 → 1
例:
print( bit.band( 18, 3 ) )
18(2進数:10010)と3(2進数:00011)のビット単位ANDを求め、結果を表示する。
2 (2進数:00010)が表示される。
**bor
-bit.bor(&i(){m}, &i(){n})
-&i(){m}(数値)と&i(){n}(数値)のビット単位の論理和(OR)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0, 0 → 0
1, 0 → 0
0, 1 → 0
1, 1 → 1
例:
print( bit.bor( 18, 3 ) )
18(2進数:10010)と3(2進数:00011)のビット単位ORを求め、結果を表示する。
19(2進数:10011)が表示される。
**bxor
-bit.bxor(&i(){m}, &i(){n})
-&i(){m}(数値)と&i(){n}(数値)のビット単位の排他的論理和(XOR)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0, 0 → 0
1, 0 → 1
0, 1 → 1
1, 1 → 0
例:
print( bit.bxor( 18, 3 ) )
18(2進数:10010)と3(2進数:00011)のビット単位XORを求め、結果を表示する。
17(2進数:10001)が表示される。
**blshift
-bit.blshift(&i(){n}, &i(){bits})
-&i(){n}(数値)を左へ&i(){bits}(数値)ビットだけシフトする
-戻り値:数値型
&i(){n} * 2 ^&i(){bits} に等しい。
例:
print( bit.blshift( 18, 2 ) )
18(2進数:10010)を左に2ビットシフトし、結果を表示する。
72(2進数:1001000)が表示される。
**brshift
-bit.brshift(&i(){n}, &i(){bits})
-&i(){n}(数値)を右へ&i(){bits}(数値)ビットだけ算術シフトする
-戻り値:数値型
例:
print( bit.brshift( 73, 2 ) )
73(2進数:1001001)を右に2ビット算術シフトし、結果を表示する。
18(2進数:10010)が表示される。
算術シフトなので最上位ビットが1の場合、ビットシフトで空いた上位ビットは1で埋められる(0の場合は0で埋められる)。
例:
print( bit.brshift( 2147483648, 2 ) )
2147483648(2進数:10000000000000000000000000000000)を右に2ビット算術シフトし、結果を表示する。
3758096384(2進数:11100000000000000000000000000000)が表示される。
**blogic_rshift
-bit.blogic_rshift(&i(){n}, &i(){bits})
-&i(){n}(数値)を2進数で右へ&i(){bits}(数値)桁だけ論理シフトする
-戻り値:数値型
例:
print( bit.brshift( 73, 2 ) )
73(2進数:1001001)を右に2ビット論理シフトし、結果を表示する。
18(2進数:10010)が表示される。
論理シフトなので最上位ビットの値に関わらず、ビットシフトで空いた上位ビットは0で埋められる。
&i(){n} / 2 ^&i(){bits} で余りを捨てた値に等しい。
例:
print( bit.brshift( 2147483648, 2 ) )
2147483648(2進数:10000000000000000000000000000000)を右に2ビット論理シフトし、結果を表示する。
536870912 (2進数:00100000000000000000000000000000)が表示される。
**tobits
【-1.41】
-bit.tobits(&i(){n})
-&i(){n}(数値)をビットごとに分解しテーブルにして返す
-戻り値:テーブル型。キーは桁の番号(1が最下位)、値は各桁の値(数値型、0か1)
【1.42】この関数は削除された。
例:
for k, v in pairs( bit.tobits( 18 ) ) do
print( k, ", ", v)
end
18(2進数:10010)をビット単位で分解したテーブルを取得し、その各キーと値を表示する。
以下の様に表示される。
1, 0
2, 1
3, 0
4, 0
5, 1
**tonumb
【-1.41】
-bit.tonumb(&i(){bit_tbl})
-ビットごとに分解された値を表すテーブル&i(){bit_tbl}(テーブル)から、それが表す値を返す
-戻り値:数値型
【1.42】この関数は削除された。
&i(){bit_tbl}のキーは桁の番号(1が最下位)、値は各桁の値(数値型、0か1)
例:
t = {}
t[1] = 0
t[2] = 1
t[3] = 0
t[4] = 0
t[5] = 1
print( bit.tonumb( t ) )
2進数10010(10進数:18)を表すテーブルを数値へ変換し、それを表示する。
18が表示される。
このページではBit APIについて解説する。
参考資料:
-[[Bit API>http://computercraft.info/wiki/index.php?title=Bit_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.58 for Minecraft 1.6.4
----
#contents
----
*Bit API
数値のビット操作に関するAPI。
Lua自体はビット演算子を持たないが、このAPIを利用すればビットフラグなども簡単に操作することができる。
数値を2進数32bitの整数としてビット操作する。小数を含む数値や、32bit(4,294,967,295)を超える数値を指定するとエラーとなる。
数値は32bit符号なし整数(0~4,294,967,295)として扱われる(例:-1 → 4294967295)。
【1.42-】CC1.41以前のLuaによる実装からJava側での実装に変更され、bit.tobits関数とbit.tonumb関数が削除された。
【1.42-】dan200.computer.core.apis.BitAPI で定義
【-1.41】lua\rom\apis\bit で定義
**bnot
-bit.bnot(&i(){n})
-&i(){n}(数値)のビット単位の論理否定(NOT)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0 → 1
1 → 0
例:
print( bit.bnot( 18 ) )
18(2進数:10010)のビット単位NOTを求め、結果を表示する。
4294967277(2進数:11111111111111111111111111101101)が表示される。
**band
- bit.band(&i(){m}, &i(){n})
-&i(){m}(数値)と&i(){n}(数値)のビット単位の論理積(AND)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0, 0 → 0
1, 0 → 0
0, 1 → 0
1, 1 → 1
例:
print( bit.band( 18, 3 ) )
18(2進数:10010)と3(2進数:00011)のビット単位ANDを求め、結果を表示する。
2 (2進数:00010)が表示される。
**bor
-bit.bor(&i(){m}, &i(){n})
-&i(){m}(数値)と&i(){n}(数値)のビット単位の論理和(OR)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0, 0 → 0
1, 0 → 1
0, 1 → 1
1, 1 → 1
例:
print( bit.bor( 18, 3 ) )
18(2進数:10010)と3(2進数:00011)のビット単位ORを求め、結果を表示する。
19(2進数:10011)が表示される。
**bxor
-bit.bxor(&i(){m}, &i(){n})
-&i(){m}(数値)と&i(){n}(数値)のビット単位の排他的論理和(XOR)を求める
-戻り値:数値型
2進数での各桁の値と結果は以下の通り
0, 0 → 0
1, 0 → 1
0, 1 → 1
1, 1 → 0
例:
print( bit.bxor( 18, 3 ) )
18(2進数:10010)と3(2進数:00011)のビット単位XORを求め、結果を表示する。
17(2進数:10001)が表示される。
**blshift
-bit.blshift(&i(){n}, &i(){bits})
-&i(){n}(数値)を左へ&i(){bits}(数値)ビットだけシフトする
-戻り値:数値型
&i(){n} * 2 ^&i(){bits} に等しい。
例:
print( bit.blshift( 18, 2 ) )
18(2進数:10010)を左に2ビットシフトし、結果を表示する。
72(2進数:1001000)が表示される。
**brshift
-bit.brshift(&i(){n}, &i(){bits})
-&i(){n}(数値)を右へ&i(){bits}(数値)ビットだけ算術シフトする
-戻り値:数値型
例:
print( bit.brshift( 73, 2 ) )
73(2進数:1001001)を右に2ビット算術シフトし、結果を表示する。
18(2進数:10010)が表示される。
算術シフトなので最上位ビットが1の場合、ビットシフトで空いた上位ビットは1で埋められる(0の場合は0で埋められる)。
例:
print( bit.brshift( 2147483648, 2 ) )
2147483648(2進数:10000000000000000000000000000000)を右に2ビット算術シフトし、結果を表示する。
3758096384(2進数:11100000000000000000000000000000)が表示される。
**blogic_rshift
-bit.blogic_rshift(&i(){n}, &i(){bits})
-&i(){n}(数値)を2進数で右へ&i(){bits}(数値)桁だけ論理シフトする
-戻り値:数値型
例:
print( bit.brshift( 73, 2 ) )
73(2進数:1001001)を右に2ビット論理シフトし、結果を表示する。
18(2進数:10010)が表示される。
論理シフトなので最上位ビットの値に関わらず、ビットシフトで空いた上位ビットは0で埋められる。
&i(){n} / 2 ^&i(){bits} で余りを捨てた値に等しい。
例:
print( bit.brshift( 2147483648, 2 ) )
2147483648(2進数:10000000000000000000000000000000)を右に2ビット論理シフトし、結果を表示する。
536870912 (2進数:00100000000000000000000000000000)が表示される。
**tobits
【-1.41】
-bit.tobits(&i(){n})
-&i(){n}(数値)をビットごとに分解しテーブルにして返す
-戻り値:テーブル型。キーは桁の番号(1が最下位)、値は各桁の値(数値型、0か1)
【1.42】この関数は削除された。
例:
for k, v in pairs( bit.tobits( 18 ) ) do
print( k, ", ", v)
end
18(2進数:10010)をビット単位で分解したテーブルを取得し、その各キーと値を表示する。
以下の様に表示される。
1, 0
2, 1
3, 0
4, 0
5, 1
**tonumb
【-1.41】
-bit.tonumb(&i(){bit_tbl})
-ビットごとに分解された値を表すテーブル&i(){bit_tbl}(テーブル)から、それが表す値を返す
-戻り値:数値型
【1.42】この関数は削除された。
&i(){bit_tbl}のキーは桁の番号(1が最下位)、値は各桁の値(数値型、0か1)
例:
t = {}
t[1] = 0
t[2] = 1
t[3] = 0
t[4] = 0
t[5] = 1
print( bit.tonumb( t ) )
2進数10010(10進数:18)を表すテーブルを数値へ変換し、それを表示する。
18が表示される。