作者ooww (選ばれし子どもたち)
看板C_and_CPP
標題[問題] if判斷式內的 絕對值abs
時間Fri Jul 30 01:29:57 2021
https://imgur.com/a/OXBUD0N
如圖所示 第9行
if( abs(b[0]) > abs(a) )
c = b[0];
abs(b[0]) 等於|-10| = 10
abs(a) 等於|-2147483648| = 2147483648
最後c=b[0],就表示10>2147483648
怎麼會這樣?
還是在if判斷式內,abs有其他解讀?
願奉上100P
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.121.224.14 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1627579799.A.18F.html
1F:推 enthos: 2147483648 == 0, INT_MAX == 2147483647 07/30 01:44
痾...為何2147483648==0 ?
2F:推 ko27tye: 你overflow了 07/30 01:49
抱歉,不太明白
https://imgur.com/a/F8xUYQA
好奇怪,b=a取絕對值,但怎麼沒作用?
※ 編輯: ooww (122.121.224.14 臺灣), 07/30/2021 01:55:48
3F:推 mick90207: 你翻一下計概會講的整數儲存範圍 07/30 02:00
4F:推 NciscalA: 有號數 overflow 是 UB 吧 07/30 02:05
5F:推 NciscalA: undefined behavior 未定義行為 07/30 02:19
感謝
6F:→ sarafciel: 你知道int這個型態的最大表示數值範圍是多少嗎? 07/30 05:52
7F:→ sarafciel: 還是你覺得int可以你要塞多大就多大?XD 07/30 05:53
原來如此
8F:→ longlongint: 能印看看 abs(-2147483648) 是多少,另外查一下是不 07/30 11:23
9F:→ longlongint: 是UB 07/30 11:23
10F:→ longlongint: 哦 上面做了 07/30 11:24
11F:→ longlongint: 推薦文章: jserv 重新理解數值 07/30 11:27
12F:→ loveme00835: 無號數叫做 wraparound, 不是相同情形 07/30 12:50
感謝
※ 編輯: ooww (122.121.236.143 臺灣), 07/30/2021 13:02:35
13F:→ MartinJ40: 去念計算機概論 07/30 13:17
14F:→ jacky1989: overflow...... 08/01 00:58
15F:推 xiao2chen: XD 不錯啊 從錯誤中學習 08/05 12:44
16F:推 ArdenCho: Overflow 了,整數溢位 10/01 18:36