Nanashi-softプログラマ専用PSSuite開発


◇PS Suite開発 -連想配列を使う方法-

●キャスト(型変換)は,原則として『(型名)変数』で可能です

例)sbyte型を int型に代入
sbyte a = 10;
int b;

b = (int)a;
ですが,これはあまり推奨しません
頭の中でビット演算がイメージできる人向けです
そうで無い人は,暗黙の型変換を使用しましょう

●暗黙の型変換

例)sbyte型を int型に暗黙の型変換で代入
sbyte a = 10;
int b;

b = a;

●暗黙の型変換が使える方向

ビルドしようとして,『暗黙的に変換できません』と表示されない全てのパターン(笑)
コンパイラが警告してくれますので,意識する必要はありません

以下の方向にだけ可能です
・よりビット数の大きい変数へ
・符号なし変数から,よりビット数の大きい符号付変数へ
・整数型から浮動小数点型へ

全部書くとこうなります
○short型に暗黙キャスト可能な変数
short←byte
short←sbyte

○ushort型に暗黙キャスト可能な変数
ushort←byte

・int型に暗黙キャスト可能な変数
int←byte
int←sbyte
int←short
int←ushort

○uint型に暗黙キャスト可能な変数
uint←byte
uint←ushort

○long型に暗黙キャスト可能な変数
long←byte
long←sbyte
long←short
long←ushort
long←int
long←uint

○ulong型に暗黙キャスト可能な変数
ulong←byte
ulong←ushort
ulong←uint

○float型に暗黙キャスト可能な変数
float←byte
float←sbyte
float←short
float←ushort
float←int
float←uint
float←long
float←ulong

○double型に暗黙キャスト可能な変数
double←byte
double←sbyte
double←short
double←ushort
double←int
double←uint
double←long
double←ulong
double←float

○decimal型に暗黙キャスト可能な変数
decimal←byte
decimal←sbyte
decimal←short
decimal←ushort
decimal←int
decimal←uint
decimal←long
decimal←ulong
※floatやdoubleからは暗黙キャストできない。理由はこれらの変数には演算誤差があるからだと思う

●キャスト時におかしくなるパターン

『(型名)変数』でキャストした場合,ビット数がはみ出たり,アンサイン型に負の数を代入したりするとおかしくなります(わかっていてやるなら構いません)

○ビット数がはみ出ると,上位が切り捨てられます
byte型は 8bitです。これに 16bitの ushort型を代入すると,上位 8bitが切り捨てられます

例)ushort型変数から byte型変数にキャスト
ushort a = 65535;
byte b;

b = (byte)a;
結果は b = 255になります


○符号付変数から,符号なし変数にキャストすると,符号ビットは無視されます

例)sbyte型から ushort型にキャスト
sbyte a = -1;
ushort b;

b = (ushort)a;
結果は b = 65535になります

この辺りは,ビット演算がわかっていれば当たり前の話ですが,わからない場合は暗黙の型変換だけを使うようにしよう。と言う話です
バグの原因になるので,カッコ付きキャストはしない習慣を身に着けましょう('-'*)




TOPプログラマ専用PSSuite開発