1. 程式人生 > 其它 >精度損失以及不超範圍可以直接賦值byte和short

精度損失以及不超範圍可以直接賦值byte和short

/*
java中有一個語法規則:
當這個整數型字面量沒有超出byte的取值範圍,那麼這個
整數型字面量可以直接賦值給byte型別的變數。

這種語法機制是為了方便寫程式碼,而存在的。
*/
public class 精度損失以及不超範圍可以直接賦值byte和short
{
  public static void main(String[] args)
  {
    // 分析:以下程式碼編譯可以通過嗎?
    // 300 被預設當做int型別
    // b變數是byte型別
    // 大容量轉換成小容量,要想編譯通過,必須使用強制型別轉換符。
    // byte b = 300;

    // 要想讓以上的程式編譯通過,必須加強制型別轉換符
    // 雖然編譯通過了,但是可能精度損失。
    // 300這個int型別對應的二進位制:00000000 00000000 00000001 00101100
    // byte佔用1個位元組,砍掉前3個位元組,結果是:00101100 (44)
    byte b = (byte)300;
    System.out.println(b); // 44

    // 這個編譯能通過嗎?
    // 1是int型別,預設被當做int型別來看。
    // x是byte型別,1個位元組,大容量無法直接轉換成小容量;
    // 按說是編譯報錯的;
    byte x = 1;
    byte y = 127;
    //byte z = 128;//錯誤不相容的型別:從int轉換到byte可能會有損失

    // 當整數型字面量沒有chaocshort型別取值範圍的時候,該字面量可以直接賦值給short。
    // 型別的變數
    short s = 1;
    short s1 = 32767;
    // 錯誤:不相容的型別:從int轉換到short可能會有損失
    //short s2 = 32768;
    System.out.println(s);
  }
}