1

我将 Cosmic C 编译器用于 STM8 微控制器并使用浮点变量。对于当前使用的平台,编译器不提供双精度类型。无论如何,当一个人使用双打时,它们被视为浮点数。

我想知道在使用 fabs() 时是否需要将浮点类型转换为加倍?它被声明为double fabs(double x);

我在编译器文档中没有找到任何关于此的内容。

但即使没有类型转换,它也可以在没有警告的情况下编译。顺便说一句,当我将 double 与 float 混合时,GCC 也会在没有警告的情况下编译。

4

1 回答 1

0

数字提升

每当来自一种类型的值被转换为更大的相似数据类型的值时,这称为数值提升(或扩展,尽管该术语通常为整数保留)。例如,一个 int 可以扩展为 long,或者将 float 提升为 double:

1 2 长 l(64); // 将整数 64 加宽为 long double d(0.12f); // 将浮点数 0.12 提升为双精度虽然术语“数字提升”涵盖任何类型的提升,但在 C++ 中还有两个具有特定含义的术语:

积分提升涉及将比 int 更窄的整数类型(包括 bool、char、unsigned char、signed char、unsigned short、signed short)转换为整数(如果可能)或 unsigned int。浮点提升涉及将浮点数转换为双精度数。积分提升和浮点提升在特定情况下用于将较小的数据类型转换为 int/unsigned int 或 double,因为这些数据类型通常是执行操作时性能最高的。

关于促销要记住的重要一点是它们始终是安全的,并且不会导致数据丢失。

资源:

http://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/

于 2016-09-07T11:32:33.220 回答