0

当我写:

if ((1/3) > 0) ...

我是否需要将其中一个操作数转换为 (float) 以使此条件为真?或者 C 使用的默认变量类型是什么?

如果我要写:

if ((1.0/3) > 0) ...

现在情况是否发生了变化,因为编译器注意到其中一个操作数必须是浮点数?

4

3 回答 3

5

我是否需要将其中一个操作数转换为 (float) 以使此条件为真?

是的,因为整型文字是类型int,并且两种类型之间的除法int也返回一个int,这意味着省略了分数。

现在情况是否发生了变化,因为编译器注意到其中一个操作数必须是浮点数?

是的,因为除法的一个操作数现在是 a double,因此除法返回 adouble以保持精度。(float文字后跟一个f, 就像在 中一样1.0f,但这对于您的问题并不重要。)

于 2013-01-20T15:12:13.007 回答
5

在没有后缀的情况下,足够小的数字有intdouble类型

a = 42; /* 42 has type int */
b = 42.0; /* 42.0 has type double */

您可以使用后缀来指定文字的类型

c = 42U; /* unsigned int */
d = 42.0f; /* float */
e = 42.0L; /* long double */
f = 42ULL; /* unsigned long long (in C99; C89 didn't have long long) */
于 2013-01-20T15:14:51.987 回答
1

“1”、“3”、“0”都是整数。
而“1.0”是双精度。
to 情况之间的不同之处在于 double/integer 是 double 而 integer/integer 是整数。

于 2013-01-20T15:28:52.003 回答