【发布时间】:2020-01-25 20:08:34
【问题描述】:
printf 的实现如何有效地实现整数到十进制的转换?
【问题讨论】:
-
阅读How to Ask 和minimal reproducible example。您的问题似乎超出了 Stack Overflow 的范围。 2 的补码不是 C 支持的唯一二进制表示。阅读语言和标准库标准文档(进行搜索)。
-
@jwdonahue:(a) 这里不需要 MRE。这个问题不是调试帮助的请求。 (b) 语言和标准库文档没有提供有关如何实现转换的信息,而这正是问题所要求的。
-
实际上,该标准使用“未定义”和“实现定义”等形式的措辞。我总是检查新用户是否阅读过How to Ask,如果没有,我建议和minimal reproducible example 阅读。
-
any official c documentation that supports your answers它是在标准库中实现的,它是为您的目标和编译器实现的。标准并不关心它是如何实现的。 -
《c 语言中如何实现二进制到十进制的转换》有一个gotcha - STL 秘籍。一个标准库实现可以使用未定义的行为和实现定义的行为来发挥它的优势——它可以“知道”UB和IDB是如何工作的——对于那个系统。便携式用户代码应该不是。例如。一些标准库源代码做
int i; ..... unsigned u = ... (unsigned)-i;(UB 和i==INT_MIN)。因此,对于用户代码来说,查看 STL 源代码并不总是好的做法。
标签: c programming-languages implementation