1

私はべき関数の実装で遊んでいました:

#include <iostream>
using namespace std;

int pow(int b, int e)
{
  int result;

  if (e == -1 && b != 0)
  {
    cout << "b = " << 1/b << endl;
    return 1/b;
  }

  else if (b != 0 && e != 0)
  {
    //int e_int(int (e));
    bool e_bool(e < 0);
    e = (e_bool*-e + !e_bool*e);
    result = b = pow(b, -e_bool)*(b*!e_bool + +e_bool);
    cout << endl << "\"result\" = " << result << " " << e << endl;

    for(int i = 1; i < e; i += 1)
    {
      result *= b;
    }
    return result;
  }

  else if (e != 0 && b == 0)
  {
    return 0;
  }

  else if (e == 0 && b != 0)
  {
    return 1;
  }

  else if (b == 1)
  {
    return 1;
  }

  else if (e == 1)
  {
    return b;
  }

  else
  {
    cout << endl << "Error";
    return -1;
  }
}

int main ()
{
  cout << endl << pow(-2, -1);

  return 0;
}

出力次のとおりです。

b = 0

0

bが0に設定されるのはなぜですか?

4

2 に答える 2

3

整数除算では、整数の結果しか生成できません。あなたのプログラムはこの行を引き起こします:

cout << "b = " << 1/b << endl;

実行するにbは、が1より大きい整数の場合、結果はになります0

于 2013-01-26T00:28:14.220 に答える
2

0に設定されるとは言いませんb。関数内に次のステートメントがあります。

cout << "b = " << 1/b << endl;

は整数なのでb1/b整数除算であり、値は最終的に。になり0ます。

于 2013-01-26T00:27:51.750 に答える