API > Bit

「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が表示される。

表示オプション

横に並べて表示:
変化行の前後のみ表示: