2バイトを短いものにまとめるには:
/* combine 0xa5 and 0x9c to 0xa59c */
public class Unsigned
{
public static void main(String[] args)
{
byte a = (byte) 0xa5;
byte b = (byte) 0x9c;
//int c = ((a&0xff)*256)&0xffff+(b&0xff); // 0
//int c = a*256+b; // ffffa49c
int c = (int)a*256+(int)b; // ffffa49c
System.out.printf("%4x\n", c);
}
}
なぜそれらはすべて間違っているのですか?
====
実行可能なバージョン:
/* combine 0xa5 and 0x9c to 0xa59c */
public class Unsigned
{
public static void main(String[] args)
{
byte a = (byte) 0xa5;
byte b = (byte) 0x9c;
//int c = ((a&0xff)*256)&0xffff+(b&0xff); // 0
//int c = a*256+b; // ffffa49c
//int c = (a&0xff)*256+(b&0xff); // a59c
int c = ((a & 0xFF )<< 8) | (b & 0xFF); // a59c
System.out.printf("%4x\n", c);
}
}