将这些数据类型理解为原语
(int)char,和(char)int是数据的解释.(int)c给出该字符的整数值,(char)14返回由14编码的字符.
我总是把它理解为"内存解析",这样它只需要取得该位置的值,然后对其应用类型过滤器.
鉴于浮点存储为科学记数法的某种形式,存储在内存中的内容应该是垃圾作为整数.查看此实用程序http://www.h-schmidt.net/FloatConverter/IEEE754.html似乎整个数字部分是分开的.
但是,由于这是在内存的较高部分,int cast如何知道"重新格式化"?编译器是否识别它是浮点数并应用特殊处理,或者发生了什么?
你对演员表的理解是完全错误的.强制转换只是对从一种类型到另一种类型的值转换的显式请求.它们不会重新解释一种类型的表示,就好像它有不同的类型一样.源代码:
float f = 42.5;
int x;
x = (int)f;
Run Code Online (Sandbox Code Playgroud)
只是指示编译器生成将表达式的浮点值截断为f整数并将结果存储在对象中的代码x.
我总是把它理解为"内存解析",这样它只需要取得该位置的值,然后对其应用类型过滤器.
这是一个错误的理解.
该语言指定基本算术类型之间的转换.在网络上查找"常用算术转换".你会发现很多描述它的链接.为了将浮点类型转换为整数类型,这就是C99标准所说的:
6.3.1.4实数浮点数和整数
1当实数浮动类型的有限值转换为除了以外的整数类型时
_Bool,小数部分被丢弃(即,该值被截断为零).如果整数部分的值不能用整数类型表示,则行为是未定义的.
float f = 4.5;
int i = (int); // i is 4
f = -6.3;
i = (int)f; // i is -6
Run Code Online (Sandbox Code Playgroud)