1樓:wang
為什麼 ans 改成 int 會出錯,簡單說一切問題都出在這一行
ans+=h*
pow(2,
i);這一行等價於:
doublet0=
(double)h
*pow(2
,i);doublet1=
(double
)ans+t0
;ans=(
int)t1;
當 h = 1, i = 31 時 h * pow(2, i) 的值就是 ,已經超過 int 能表示的最大值了
因為 ans > 0,那麼 ans + h * pow(2, i) 同樣不是 int 能表示的
最後,在 t1 賦值給 ans 前,要隱式轉換成 ans 一樣的整數型別,即 int
問題是 double 變數 t1 儲存的值超過了 int 的表示範圍,轉換成 int 該是乙個什麼值,這在 C/C++ 標準中屬於未定義行為,簡單說就是什麼結果都是有可能的。這個坑我猜很多人都不知道,或許會想當然認為 double 轉 int 跟 long long 轉 int 一樣無法表示的部分被截斷。
在你的平台上(x86),顯然超過了範圍的轉換結果對於 int 就是 -2147483648(0x80000000),當作 uint32_t 來看,就是 2147483648
可以試試在正負均超過 int 表示範圍時,是什麼值。
doublea=
(double
)INT_MAX+1
;doubleb=
(double
)INT_MIN-1
;std
::cout
<<(int)a
< endl ;std ::cout <<(int)b < endl; 2樓: 因為在你的執行環境中int是32位數,哪怕你是64位程式。只有long long 是64位 因為int是有符號整數,他的大小是2^31-1,最高位為1為負數,負數的表示方式是,最高位為1,其餘各位取反,然後再加1. 例如int的最大值是0X7FFFFFFF;對此數加1,將會變成負數0x80000000; 然後再加1,就變成負數+1了,因此也得不到正確的結果。 執酒笑白衣 一些是宅男,二次元,喜歡看番,喜歡裡面的plmm,就用頭像了,還有一些男生是打遊戲覺得讓別人以為是女孩子,畢竟隊友們對女孩子會包容一點,所以現在有個就叫,猛男頭像,就是用的是軟妹頭像圖 餘悸 我身邊就有,有些男生喜歡有女生頭像是他們的自由,我也是比較喜歡用男生頭像,我身邊的男生用女生頭像... 雲淵sytswei 只要前期不被抓住下獄,順利混到了起兵階段,就一樣能贏,建文帝所擁有的家底可以說相當之豐厚,雖然朱元璋殺功臣導致戰將缺乏,但是兵多糧足,不然也支撐不起五十萬大軍的動員。再加上也並不是完全的無將可用,徐輝祖,盛庸,鐵鉉,每乙個都讓朱棣吃足了苦頭。可就是這樣的陣容依舊被朱棣翻盤了,更不... 星月夜 目前不能完全做到,以後應該會有。目前可以完成你所說的過程的職位叫產品經理。真的有些甲方會提出匪夷所思 異想天開的要求。有時候都想開啟他們的小腦袋瓜,看看裡面是什麼。比如要求手機桌布可以隨著手機殼的顏色變化。 物理極客銘 我可以提供乙個函式,輸入想法和轉賬id,返回乙個電腦程式檔案。File ...男生為什麼喜歡把自己頭像換成女生頭像?
如果把建文換成崇禎,永樂還能打贏嗎?為什麼?
為什麼不能有把中文想法直接轉換成電腦程式的程式設計呢?