0

私が書くとき:

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

この条件を真にするために、オペランドの 1 つを (float) にキャストする必要がありますか? または、Cが使用しているデフォルトの変数型は何ですか?

そして、私が書くなら:

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

オペランドの 1 つが float でなければならないことをコンパイラが認識したため、状況は変わったのでしょうか?

4

3 に答える 3

5

この条件を真にするために、オペランドの 1 つを (float) にキャストする必要がありますか?

はい、整数リテラルは型intであり、2 つの型を除算するとintも返さintれるため、分数が省略されることを意味します。

オペランドの 1 つが float でなければならないことをコンパイラが認識したため、状況は変わったのでしょうか?

はい、除算のオペランドの 1 つが aになり、除算は精度を維持するためdoubleに a を返すためです。double(のように、floatリテラルの後に が続きますが、これは質問に関してはあまり重要ではありません。)f1.0f

于 2013-01-20T15:12:13.007 に答える
5

接尾辞がない場合、十分に小さい数にはintordouble型があります

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 の状況の違いは、整数/整数が整数であるのに対し、倍精度/整数は倍精度であることです。

于 2013-01-20T15:28:52.003 に答える