トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2004-6-1

Javaの暗黙のcast

Javaの暗黙のキャストは本当に怖い
内部では、演算はint型で実行されているようで、
たとえば、

byte a = (byte)0xfe;
byte b = (byte)0xfe;
short c;
c = a + b;

というようなコードでは、
"possible loss of precision"とか"精度が落ちている可能性"
というエラーが出力される。
とりあえず、コンパイルをとおすためには、

c = (short)(a+b);

と明示的にキャストしなければいけない
ただし、この場合cの値は-4になってしまう
byteは符号付の型なので正しいのだが、
0x1fcの値を答えとして得たいような場合には

c = (short)((((int)a)&0x00ff) + (((int)b)&0x00ff))

とか、しなければいけない。
Lispもびっくりの括弧の数。
うーん、UBYTEとかUINTとかっていうクラス作るか?