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