為什麼把uint32 t換成int後輸出就變了呢?

時間 2021-05-30 05:18:25

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 ...