Hmmm. Betrachten Sie dieses Programm, dessen Ziel es ist, den besten Weg zu finden, die unteren 16 Bits einer ganzen Zahl als eine ganze Zahl mit Vorzeichen zu erhalten.Erhalten der unteren 16 Bits eines Java-Int als vorzeichenbehafteter 16-Bit-Wert
public class SignExtend16 {
public static int get16Bits(int x)
{
return (x & 0xffff) - ((x & 0x8000) << 1);
}
public static int get16Bits0(int x)
{
return (int)(short)(x);
}
public static void main(String[] args)
{
for (String s : args)
{
int x = Integer.parseInt(s);
System.out.printf("%08x => %08x, %08x\n",
x, get16Bits0(x), get16Bits(x));
}
}
}
Ich wollte den Code in get16Bits0 verwenden, aber ich habe die Warnung „Unnötige Besetzung von kurz bis int“ mit Eclipse-Compiler und es macht mich stutzig, den Compiler zu denken konnte mein „unnötiges cast“ optimiert out . Wenn ich es auf meinem Rechner mit dem Compiler von Eclipse ausführe, bekomme ich identische Ergebnisse von beiden Funktionen, die sich so verhalten, wie ich es vorhabe (Testargumente: 1 1111 11111 33333 66666 99999). Bedeutet das, dass ich get16Bits0 benutzen kann? (Mit passenden Warnungen an zukünftige Code-Betreuer) Ich habe immer angenommen, dass JRE und das Compiler-Verhalten beide maschinenunabhängig für die Arithmetik sind, aber dieser Fall testet meinen Glauben etwas.
ooh! Vielen Dank! Noch besser. –