【发布时间】:2016-02-25 03:50:20
【问题描述】:
继续将这些数据类型理解为原语
(int) char 和 (char) int 是数据的解释。 (int) c 给出该字符的整数值,而 (char) 14 则返回由 14 编码的字符。
我一直将其理解为“内存解析”,因此它只获取该位置的值,然后对其应用类型过滤器。
鉴于浮点存储为某种版本的科学记数法,存储在内存中的应该是整数形式的垃圾。查看此实用程序http://www.h-schmidt.net/FloatConverter/IEEE754.html 似乎整数部分是分开的。
但是,由于它位于内存的较高部分,因此 int 转换如何知道“重新格式化”?编译器是否确定它是一个浮点数并应用特殊处理,或者发生了什么?
【问题讨论】:
-
不要质疑低级代码。尝试了解编译器的工作原理就像尝试学习二进制:您已经习惯于用更高级的语言来思考,您将一无所获。
-
这是编译器的工作之一:生成一个真正从整数表示转换为类似(但不可避免地更复杂)
float或double编码的代码序列。同样,float和double之间的转换也不是微不足道的。 -
鉴于您已将其标记为 C,因此问题标题确实应该固定为更像 C。没有
float.truncate,也不能只写(int) float。 -
是否所有原始类型都为交叉转换处理?
-
@Captain Prinny “所有原始类型都为交叉转换处理?”许多是,但不是全部。例如,
double与void *之间没有定义。
标签: c