プロが教える店舗&オフィスのセキュリティ対策術

c言語の勉強をしていて、if文について1つ疑問があります。
それは、if(x<=y<=z)の形(x、zは数です。)で上手く作動しない理由です。
if(x<=y)やif(y<=z)の形では作動するのに、なぜ上手く作動しないのでしょうか?

初歩的な質問ですいません。

A 回答 (8件)

数学では


Ⅹ≦Y≦Z
と書いてしまうことが多いけど、これは
X≦YかつY≦Z
を略して書いてます。

X=Y=Z
もX=YかつY=Z の意味ですが
コンピューターの言語で、この略し方をサポ―トしている
言語を私は知らないですね。
X=Y≧Z=2
とか書けたら面白そうだけど
式の定義がかなり厄介そう。
2項演算子とかの定義に大きな拡張が必要そうです。
あんまり考えたくない(^-^;

Cだと
x<=y<=z

(x<=y)<=z
となって、(x<=y)は0か1になるから
全然違う意味になります。
    • good
    • 0

今の Perl だと


$a == $b == $c

$a == $b && $b == $c
の (ような) 意味になるよ>#7. あと
$a <= $b < $c

$a <= $b && $b < $c
と (だいたい) 同じ.

優先順位が同じものでしかこの機能は働かないので, 残念なことに
$a == $b > $c == $d
と書いても
$a == $b && $b > $c && $c == $d
にはならないけど.
    • good
    • 0

「あなたが期待するように動いていない」だけであって, 規格上は完璧に「上手く動作」しているのではないかな.



比較演算子は
左結合かつ「0 または 1 の整数値」を返す
ので,
x<=y<=z

(x<=y)<=z
と解釈され, これは x<=y が成り立つなら
1<=z,
成り立たないなら
0<=z
となる. #3 の言う通りで, これが「あなたの書いたプログラムにおける『正しい』動作」である.

自分が間違った動作を期待しているために「正しい動作」をしていても「上手く動作しない」と勘違いしているだけ.
    • good
    • 5

C言語でそういった書き方が規定されていないからです


比較演算子で行えるのは、あくまで2つの数値一組の比較しかできません

実際には複数の条件でをつけたいこともあり、かといってif分で入れ子にすると見難くなるので、&&, ||, ! といった論理演算子が有ります
また条件がより複雑になる場合は、計算の優先順位を指定する () も組み合わせることになります

数学の x≦=y≦z と同じことをしたければ、C では
( x <= y ) && ( y <= z )
に成りますが、比較演算子は論理演算子より優先順位が高いので、この場合は () はなくても OK です
    • good
    • 0

C言語ではif(x<=y<=z)この形は使えません



if(x<=y && y<=z)の様な形にしないとダメです

&&は「且つ」です
    • good
    • 0

正しくは、if((x<=y) && (y<=z)) です。



if(x<=y<=z) だと
x<=y が真(1)のときは if(1<=z)
x<=y が偽(0)のときは if(0<=z)
になるのでは。
動作確認はしていません。
    • good
    • 0

if(x<=y<=z)は、文法的にサポートされていません。

    • good
    • 0

次のように書き変えてください。


IF(AND((x<=y,y<=z))
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!