トップ  検索

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とかっていうクラス作るか?

Copyright (c) 2001-2008 Takefumi MIYOSHI, All rights reserved