正如從OracleJava爲什麼要將long(64)轉換爲float(32)考慮擴大?
參考從Oracle Docs
加寬原語轉換 19上的原始類型特定的轉換被稱爲擴大原始轉化規定:
- 字節到短型,整型,long,float或double
- 短整數,長整數,浮點數或雙整數
- 炭爲int,長整型,浮點,或雙
- INT到長整型,浮點,或雙
- 長浮動或雙?
- 浮子加倍
如果浮子具有32位和長具有64如何被所考慮加寬?這不應該被認爲是縮小?
正如從OracleJava爲什麼要將long(64)轉換爲float(32)考慮擴大?
參考從Oracle Docs
加寬原語轉換 19上的原始類型特定的轉換被稱爲擴大原始轉化規定:
如果浮子具有32位和長具有64如何被所考慮加寬?這不應該被認爲是縮小?
可由float
或double
表示的值的範圍遠大於可由long
表示的範圍。儘管從long
轉換爲float
時可能會丟失有效數字,但它仍然是「擴大」操作,因爲範圍更寬。
從Java Language Specification, §5.1.2:
int或長值的擴大轉換浮動,或長值加倍的,可能導致精度的損失 - 即,其結果可能會丟失一些的值的最低有效位。在這種情況下,使用IEEE 754輪到最近模式(§4.2.4),得到的浮點值將是整數值的正確舍入版本。
。請注意,double
可以完全代表每一個可能的int
值。
@ Mrshll187 - 實際上,「float」是32位,其中8位用於指數。只有24位可用於表示尾數。我不知道「我可以達到64位」意味着什麼。浮點數可以表示1.40129846432481707e-45到3.40282346638528860e + 38範圍內的一些數字(以及一些特殊值,如NaN和±無窮大)。 「long」可以表示範圍爲-9,223,372,036,854,775,808至+9,223,372,036,854,775,807的所有數字。您可以將每個類型名稱視爲數字子集的名稱。子集重疊,但每個子集都有其他元素。 – 2013-03-05 17:04:50
謝謝泰德!正如我所想的那樣,我正在很難把握這一點。 – 2015-02-18 21:42:11
這被認爲在擴大,因爲float
和double
可以代表比long
更大的值。您可能會失去精確度,但可以表示該值(至少近似)。
它被認爲是在擴大,因爲float可以表示的數字大於long可以表示的數字。僅僅因爲float使用32位精度並不意味着它可以表示的數字被限制在2^32。
例如,浮點數(float)Long.MAX_VALUE+(float)Long.MAX_VALUE
大於Long.MAX_VALUE
,儘管浮點數的精度較低。
我認爲它與精度有關。我只能想到:) – kaysush 2013-03-05 16:42:36
你說:「*如果一個長有32位和一個長有64 *」...讓你的頭腦起來 – Bohemian 2013-03-05 16:44:56
我不明白你的問題:如果一個長有32位和一個長期以來有64位如何擴大?這不應該被認爲是縮小?長數據類型是java中的一個64位有符號二進制補碼整數。請參考以下鏈接: http://docs.oracle。com/javase/tutorial/java/nutsandbolts/datatypes.html – Gourabp 2013-03-05 16:43:23