PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
關於c++的輸出問題
作者:
ac01965159
(leeleo)
2019-06-27 10:49:32
https://i.imgur.com/Qmnd7YW.jpg
上圖是我的測試,上網查過資料後,我的認知是編譯器在即將把float格式輸出前,會先
轉成double的格式,而%d會取低32bit的值轉10進制再拿去輸出,我把我的輸出值0.5手
動轉成double後,發現取低32bit的輸出應是0才對,但是結果如圖卻不是,所以想請教
各位是我哪裡理解錯了嗎?
謝謝。
作者:
LPH66
(-6.2598534e+18f)
2019-06-27 11:25:00
我猜它拿到垃圾值了我是指 printf; 不過為什麼會有垃圾值一下子想不到可能原因
作者:
djshen
(djshen)
2019-06-27 11:59:00
%d不是int?
作者:
james732
(好人超)
2019-06-27 12:12:00
我在MSVC是得到0,但gcc每次結果都不同 XD
https://i.imgur.com/3FwFQ4A.png
https://i.imgur.com/wPx5YdM.png
作者:
Fenikso
(薪水小偷)
2019-06-27 12:36:00
因為x64的parameter是先放進register不是stack
作者:
LPH66
(-6.2598534e+18f)
2019-06-27 12:37:00
vararg 也會進 reg 嗎?查了一下資料, 看起來原因應該是浮點數是放在浮點數暫存器但 %d 要抓整數所以 printf 嘗試從整數暫存器找資料就找到垃圾值了然後就找到的東西看起來 vararg 的呼叫端處理沒什麼不同所以該 (照 ABI) 進暫存器的就會進去的樣子至於 MSVC 都會是 0 就不確定是不是編譯選項的問題了...
作者:
djshen
(djshen)
2019-06-27 13:30:00
我看C11 7.16.1.1 va_arg 會有UB的情況?
作者:
ac01965159
(leeleo)
2019-06-27 14:28:00
謝謝各位前輩的回答,還是新手需要再好好消化一下。
作者:
chuegou
(chuegou)
2019-06-27 19:23:00
推個
作者:
TitanEric
(泰坦)
2019-06-28 11:27:00
寫不到學問這麼多 推
作者:
LPH66
(-6.2598534e+18f)
2019-06-28 11:35:00
printf 用錯的格式印值是 UB 沒錯啊原 PO 是在問為何這個環境上的行為會是這樣
作者:
djshen
(djshen)
2019-06-28 21:41:00
補個連結
https://reurl.cc/VxYX6
3.5.7的例子就可以看出參數怎麼放
作者:
firejox
(Tangent)
2019-06-30 00:10:00
https://godbolt.org/z/BxpmFJ
繼續閱讀
[問題] 關於multiple definition
james732
Re: [問題] C++17 Structured binding 型別無法理解
poyenc
[問題] for迴圈執行時間差異(64bit vs 32bit)
flyaway339
Re: [問題] C++17 Structured binding 型別無法理解
sarafciel
[問題] C++17 Structured binding 型別無法理解
lovejomi
[問題] 基本form的介面設計問題
qoo27734266
[問題] C語言對overflow處理
hohamita
[問題] 我剛學C++ 想請問這行code我該怎麼改Q_Q
nofun
Fw: [問題] Remote GDB 加入opencv的設定?
aris1008
Re: [問題] shared_ptr如何避免cyclic reference?
KanzakiHAria
Links
booklink
Contact Us: admin [ a t ] ucptt.com