簡體   English   中英

為什么在C中將較大的double轉換為long有時返回正數,而其他時候返回負數?

[英]Why does casting a large double to a long sometimes return a positive and other times return a negative value in C?

我將其放入iOS測試用例並在(32位iPad)模擬器中運行了它:

double whu = 3166323616091.220215;
NSLog(@"Double: %f", whu);
NSLog(@"Long:   %ld", (long)whu);
NSLog(@"Double: %f", 3166323616091.220215);
NSLog(@"Long:   %ld", (long)3166323616091.220215);

輸出為:

2014-04-23 13:40:50.904 xctest[53336:303] Double: 3166323616091.220215
2014-04-23 13:40:50.905 xctest[53336:303] Long:   -2147483648
2014-04-23 13:40:50.906 xctest[53336:303] Double: 3166323616091.220215
2014-04-23 13:40:50.907 xctest[53336:303] Long:   2147483647

我知道為什么它將long的大double值截斷為long(32位)的最大值。 但是,為什么在強制轉換文字時返回正值時,強制轉換變量返回負值? 實際上,我根本不理解為什么還會返回負數。 我是否錯過了一些與精度有關的東西?

強制轉換變量將導致運行時代碼執行轉換,並且所產生的溢出產生最大負數(0x80000000是未定義的結果,但是此運行時正在執行的操作)。 強制轉換常量將導致編譯器轉換該數字,並且確實轉換為最大正數(0x7FFFFFFF)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM