嗯。考慮這個程序,其目標是找出將整數的底部16位作爲有符號整數的最佳方法。將Java int的底部16位作爲帶符號的16位值獲取
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));
}
}
}
我打算用在get16Bits0的代碼,但我得到了「從短到int不必要鑄」與Eclipse的編譯器警告,這讓我懷疑,以爲編譯器可以優化我的「不必要投」 。當我使用Eclipse的編譯器在我的機器上運行它時,我得到了兩個函數的完全相同的結果,這些函數的行爲與我預期的相同(測試參數:1 1111 11111 33333 66666 99999)。這是否意味着我可以使用get16Bits0? (對於將來的代碼維護者有適當的警告)我一直認爲JRE和編譯器行爲對於算術都是獨立於機器的,但這種情況正在測試我的信仰。
哦!謝謝!更好。 – 2009-07-03 17:10:18