当我写:
if ((1/3) > 0) ...
我是否需要将其中一个操作数转换为 (float) 以使此条件为真?或者 C 使用的默认变量类型是什么?
如果我要写:
if ((1.0/3) > 0) ...
现在情况是否发生了变化,因为编译器注意到其中一个操作数必须是浮点数?
我是否需要将其中一个操作数转换为 (float) 以使此条件为真?
是的,因为整型文字是类型int
,并且两种类型之间的除法int
也返回一个int
,这意味着省略了分数。
现在情况是否发生了变化,因为编译器注意到其中一个操作数必须是浮点数?
是的,因为除法的一个操作数现在是 a double
,因此除法返回 adouble
以保持精度。(float
文字后跟一个f
, 就像在 中一样1.0f
,但这对于您的问题并不重要。)
在没有后缀的情况下,足够小的数字有int
或double
类型
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) */
“1”、“3”、“0”都是整数。
而“1.0”是双精度。
to 情况之间的不同之处在于 double/integer 是 double 而 integer/integer 是整数。