Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

JAVA中型別升級問題

result = operand1 + operand2

operand1是long型別,而operand2是float型別,

那result是啥型別?

為何書上說result是float型別?

跟promotion(升級)有何關係?

謝謝各位高手的回答!

已更新項目:

為何result不是運算元中較大的long型別?

2 個已更新項目:

long不是64bits,而float是32bits嗎?

3 個已更新項目:

小弟不才,再問一下,那64bits的long轉成32bits的float,就會有精準度的遺失,是嗎?還有,float型別有值的範圍嗎?他的長度是32bits是啥意思?感激不盡!

2 個解答

評分
  • 1 0 年前
    最佳解答

    這個問題跟 long 是 64bit 大於 float 32bit 沒有什麼關係。根據 Java Language Specification 的規定,Binary Numeric Promotion 的優先順序為,

    1. 如果任一運算子為 double 型態,另一個運算子會被轉為 double

    2. 如果任一運算子為 float 型態,另一個運算子會被轉為 float

    2. 如果任一運算子為 long 型態,另一個運算子會被轉為 long

    按照此例,operand1 會被轉為 float。

    2008-10-15 03:31:42 補充:

    從long轉成float是 widening primitive conversion 的一種,是有精準度遺失的問題,而遺失的是原數值最右邊的 bits。float 的值是由 32 bits 來記錄的,所以32 bits也就稱為 float 的長度,其範圍在2^(-126) 到 2(1-2^(-24)) * 2^127之間。

  • Fuhua
    Lv 4
    1 0 年前

    錯囉~

    應該是

    double > float > long > int > short

    可去找一下網路上SCJP關於Java promotion and convertions

    2008-10-14 22:54:23 補充:

    http://www.javacertificate.com/scjp/docs/javapromo...

    這份pdf中有很詳細說明關於升級和降級的規則

還有問題?馬上發問,尋求解答。