1

C は次のような条件ステートメントをどのように処理しn >= 1 <= 10ますか?

n >= 1 && 1 <= 10Pythonで評価されるので、最初は として評価されると思っていました。1 <= 10は常に true であるため、 の 2 番目の部分はand冗長です ( のブール値は のブール値X && Trueと同じですX)。

ただし、 で実行するとn=0、条件は true と評価されます。実際、条件は常に true と評価されるようです。

これは私が見ていた例でした:

if (n >= 1 <= 10)
  printf("n is between 1 and 10\n");
4

2 に答える 2

11

>=演算子は左から右に評価されるため、次のようになります。

if( ( n >= 1 ) <= 10)
    printf("n is between 1 and 10\n");

1 つ目( n >= 1 )は true または false として評価され、1 または 0 に等しくなります。次に、1 または 0 の結果と比較されresult <= 10、常に true と評価されます。したがって、ステートメントprintf("n is between 1 and 10\n");は常に印刷されます

于 2013-07-20T21:43:50.477 に答える
4

次のように左から右に評価されます。

n = 5;

if (n >= 1 <= 10)
// then
if (1 <= 10)
// then 
if (1)

かどうかを最初にチェックしますn >= 1。そうである場合は に評価され1、そうでない場合は に評価されます0。これは次の評価につながり、同様1 <= 10に評価さ1れます。これも成功することに注意してください。

n = 5;
if (n >= 3 == 1)

次のように評価されるためです。

n = 5;
if (n >= 3 == 1) // but you should never write code like this
// then
if (1 == 1)
// then
if (1)

また、それが動作する理由にも注意してくださいn = 0

n = 0;
if (n >= 1 <= 10)
// then
if (0 <= 10) // 0 isn't greater or equal to 1, so 0 (false) is "returned"
// then
if (1) // but 0 is less than or equal to 10, so it evaluates as 1 (true)
于 2013-07-20T21:43:10.090 に答える