10-29-2007 08:01 PM
10-29-2007 08:37 PM
1~3のすべてでそうですが、Selectでつないでいる8つの数値(上から1,0,2,0,3,0,4,0と並んでいる数値)が、「U8」タイプになっていないためにSample2で意図しない動作になると思われます。おそらく、ただ置いただけの数値とすると、I32になっていると思われます。
この8つの数値を全てU8にする(右クリックでタイプからU8にできます)ことで、所望の結果になると思います。
これは、数値結合関数が、入力がU8(I8)なら出力がU16(I16)に、入力がU16(I16)なら出力がU32(I32)になるようになっていることと関係します。基本的には入力のタイプのビット数の多いほうで判断されます。入力がU32(I32)の場合はなぜか下16ビットだけ取ってそれらでU32(I32)を作るという変な動作になります。そのため、Sample2で所望の動作にするためには、初段の数値結合の入力がU8(I8)である必要がありますが、Selectにつないだ数値が8ビット以外だと、初段か2段目どちらかの数値結合で意図しない結果になるおそれがあります。数値結合を2段つかって、U8→U16→U32のように格上げしたい場合は、初段の数値結合の入力を確実に8ビットにしなければなりません。1段だけの場合で、数値が小さい場合は、たまたま意図する答えになるケースもあります。
今回の場合、Sample1で、4つの数値で配列を作っているところで、一番上と一番下が赤印(タイプキャストが発生)がついているところがポイントと思います。これは、真ん中2つのSelectから出てきた数値を入れているところが8ビットより広いことを意味します。
以上、ご確認下さい。
10-29-2007 08:49 PM
10-29-2007 10:24 PM
白石様
素早いご回答を下さり,誠にありがとうございます.白石様のご回答の通り,数値定数は「I32」になっていましたので「U8」に変更したところ,所望の結果になりました.
また以前より疑問に思っていた赤印の意味も理解することができ大変感謝しております.今後ともよろしくお願い申し上げます.