ビット演算子の使用について

ビット演算子は、浮動小数点値を内部処理して、32 ビット整数に変換します。実際に実行されるビット演算は演算子によって異なりますが、どのビット演算でも 32 ビット整数が 2 進数 (ビット) 単位で評価され、新しい値が計算されます。ビット単位シフト演算子の一覧については、ビット単位シフト演算子についてを参照してください。ビット論理演算子の一覧については、ビット論理演算子についてを参照してください。

Flash でのビット演算子の使用はあまり一般的ではありませんが、状況によっては役立つことがあります。たとえば、Flash プロジェクトの許可のマトリックスを作成する場合で、許可の種類ごとに別の変数を作成したくないときがあります。このような場合は、ビット演算子を使用できます。

次の例では、Array.sort() メソッドと共にビット単位の論理和 (OR) 演算子を使用する方法を示します。

ビット単位の論理和 (OR) 演算子を使用するには :

  1. [ファイル]-[新規] を選択し、新規 Flash ドキュメントを作成します。
  2. 次の ActionScript を [アクション] パネルに入力します。
    var myArr:Array = new Array("Bob", "Dan", "doug", "bill", "Hank", "tom");
    trace(myArr); // Bob,Dan,doug,bill,Hank,tom
    myArr.sort(Array.CASEINSENSITIVE | Array.DESCENDING);
    trace(myArr); // tom,Hank,doug,Dan,Bob,bill
    

    最初の行では、ランダムな名前の配列を定義し、それらの名前をトレースして [出力] パネルに表示します。次に、Array.sort() メソッドを呼び出し、定数値 Array.CASEINSENSITIVE および Array.DESCENDING を使って 2 つのソートオプションを指定します。ソートメソッドにより、配列のアイテムは逆の順番 (z から a) でソートされます。この検索では大文字と小文字が区別されません。a および A は同じように扱われますが、これは Za よりも先になる、大文字と小文字を区別する検索とは異なります。

  3. [制御]-[ムービープレビュー] を選択して ActionScript をテストします。次のテキストが [出力] パネルに表示されます。
    Bob,Dan,doug,bill,Hank,tom
    tom,Hank,doug,Dan,Bob,bill
    

ソートメソッドでは、5 つのオプションを利用できます。

配列のソートオプションを定義するには、3 つの異なる方法があります。

my_array.sort(Array.CASEINSENSITIVE | Array.DESCENDING); // 定数
my_array.sort(1 | 2); // 数値
my_array.sort(3); // 数値を追加

ソートオプションの数値は、明白ではないものの実際にはビット単位の桁 (バイナリまたは基数 2) です。定数値 Array.CASEINSENSITIVE は数値 1 に等しく、これはバイナリ値 1 でもあります。定数値 Array.DECENDING は数値 2 またはバイナリ値 10 を持ちます。

バイナリ値の操作では、混乱が発生しがちです。バイナリには、1 または 0 の 2 つの値のみが可能であり、このために値 2 が 10 として表されます。数値 3 をバイナリで表示する場合は、11 (1+10) になります。バイナリでは、数値 4 は 100、数値 5 は 101、のようになります。

次の ActionScript では、ビット単位の論理積 (AND) 演算子を使用して Array.DESCENDING および Array.NUMERIC 定数を加算し、数値の配列を降順でソートする方法を示します。

var scores:Array = new Array(100,40,20,202,1,198);
trace(scores); // 100,40,20,202,1,198
trace(scores.sort()); // 1,100,198,20,202,40
var flags:Number = Array.NUMERIC|Array.DESCENDING;
trace(flags); // 18 (基数 10)
trace(flags.toString(2)); // 10010 (バイナリ -- 基数 2)
trace(scores.sort(flags)); // 202,198,100,40,20,1

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000743.html