/* 簡易ビットフラグ検索および書きこみルーチン */ /* このルーチンはBit_Locateに書きこみ位置、Bit_Typeに数値を 記録して呼び出し、BitのBit_LocateにBit_Typeを記録してビットフラグを 作成するルーチンです。検索ルーチンは、Bit_Locateに検索する ビット位置(一番右が1)を記録して呼び出すと、1か0かをBit_Ser で返します。 ただし、僕は数学は苦手で、あんまり複雑なことはできないため、 非常に簡易的な代物ですので、10ビットしか扱えません(^^; (0000000000-1111111111まで) 代わりにそれなりに速いと思います(^^;(^^;。 注意点として、使用時にあらかじめBitFlag_Initを呼び出して初期化 しなければならないということと、フラグ本体をあらわすBitや値を示す Bit_Typeに0と1以外の数字を入れてはいけないということです(^^;。 初期化アクションを呼び出さなかったり、ビット位置以外のどこかに 0と1以外の数字を入れて実行した場合の動作は保証できません。 */ // 初期化ルーチン action BitFlag_Init@( 0 ) { int Bit = 0; //ビット本体(使用時にはこれにフラグを代入) int Bit_Locate = 0; //ビット位置 int Bit_Type = 0; //ビットの値 int Bit_Ser = 0; //ビット検索結果 int Bit_Temp = 0; //作業用変数 int Bit_Temp2 = 0; //作業用変数2 } // ビット書きこみ action BitFlag_Write@( 0 ) { Call( "BitFlag_Serach" ); if( Bit_Ser != Bit_Type ) { if( Bit_Type == 0 ) { Bit = Bit - Bit_Temp2; } else if( Bit_Type == 1 ) { Bit = Bit + Bit_Temp2; } } } // ビット検索 action BitFlag_Serach@( 0 ) { Bit_Temp2 = 1; for( Bit_Temp = 1; Bit_Temp != Bit_Locate; Bit_Temp = Bit_Temp + 1) { Bit_Temp2 = Bit_Temp2 * 10; } Bit_Ser = ( Bit / Bit_Temp2 ) % 2; }