1

この式の戻り値の型を double として返すにはどうすればよいですa = 2 * NUM + z;か?

ここに私の完全なプログラムがあります:

#include <iostream>

using namespace std;

int main()
{
const int NUM = 10;
const double x = 20.5;

int a, b;

double z;

char grade;

a = 25;

cout <<"a = " <<a <<endl;

cout <<" Enter two integers : ";

cin >> a >> b;

cout << endl;

cout << " The numbers you entered are "

     <<a <<" and " <<b <<endl;

      z = x + 2 * a - b;

      cout <<"z = " <<z <<endl;

      grade = 'A';

      cout <<"Your grade is " <<grade <<endl;

      a = 2 * NUM + z;

      cout << "The value of a = " << a <<endl;

      return 0;

}
4

4 に答える 4

0

標準より、6.3.1.8 通常の算術変換

.......

それ以外の場合、両方のオペランドで整数昇格が実行されます。次に、プロモートされたオペランドに次の規則が適用されます。

  1. 両方のオペランドが同じ型の場合、それ以上の変換は必要ありません。

  2. それ以外の場合、両方のオペランドが符号付き整数であるか、両方が符号なし整数型である場合、整数変換ランクの小さい型のオペランドは、ランクの大きいオペランドの型に変換されます。

だから、式では -

2 * NUM + z;

NUMは のタイプconst intに比べてランクの低いタイプのzですdouble。規定により、intに昇格double。2 つの double 型オペランドの結果は、 type の結果を生成しますdouble。ただし、結果を型に割り当てているintため、警告が表示されます。の型aを double に変更するとうまくいくはずです。

于 2013-09-10T02:25:35.973 に答える
0

あなたzは ですdoubleので、2 * NUM + zdoubleですが、 に値を割り当てましaint。私はあなたがここでやろうとしていることではありません。2 * NUM + zinの値を切り捨てで保存しようとしている場合はa、キャストを追加する必要があります: a = static_cast<int>(2 * NUM + z);OTOH、切り捨てが不要で完全な値を保存したいdouble場合は、それをdouble変数に保存する必要があります。

于 2013-09-10T02:21:18.260 に答える