gpt4 book ai didi

c++ - 以二进制形式打印 double

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:44 24 4
gpt4 key购买 nike

在 Bruce Eckel 的“Thinking in C++”中,给出了一个打印 double 值的程序
以二进制形式。 (第 3 章,第 189 页)

int main(int argc, char* argv[]) 
{
if(argc != 2)
{
cout << "Must provide a number" << endl;
exit(1);
}
double d = atof(argv[1]);
unsigned char* cp = reinterpret_cast<unsigned char*>(&d);
for(int i = sizeof(double); i > 0 ; i -= 2)
{
printBinary(cp[i-1]);
printBinary(cp[i]);
}
}

这里当 i=8 时打印 cp[i](假设 double 是 8 个字节),这不是未定义的行为吗?
我的意思是这段代码不起作用,因为它不打印 cp[0]。

最佳答案

A1:是的,当它访问cp[8]时会是未定义的行为。

A2:是的,它也不打印cp[0]。

如图所示,它打印有效值 0..7 的字节 7、8、5、6、3、4、2、1。所以,如果你正确地从书中复制了代码,那么这本书的代码中就有一个错误。检查本书的勘误页,如果有的话。

它解除循环也很奇怪;一个更简单的公式是:

for (int i = sizeof(double); i-- > 0; )
printBinary(cp[i]);

据推测,以相反的顺序打印字节也是有充分理由的;不清楚那会是什么。

关于c++ - 以二进制形式打印 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com