お世話になっております。いいよぉです。素人的な質問となりますが、下記わかればご教示ください。
条件式Aと条件式Bとの積を通常「&&」で取っていますが、不意に記述ミスで「&」で記述している部分があったのですが、
ABの条件を4通りふって検証したところ、問題なく判定されておりました。
if((条件文A)&(条件文B))・・・・は、 if((条件文A)&&(条件文B)) と同じ判定になりました。
・記述する条件分によって、同じ意味を持つのでしょうか。
・できるケースとできないケースとがありますでしょうか。
・コンパイラによって、正式な&&へ修正されているのでしょうか。
以上、宜しくお願い致します。
> 処理系によっては、真= -1 で実装しているものもあります。
1981年発行の『プログラミング言語C』初版(所謂 K&R)の「7.6 関係演算子」の項に
演算子 < (より小さい), > (より大きい), <= (小さいか等しい), >= (大きいか等しい)は,指定された関係が成り立たなければ, 答として 0 を出し,正しければ1を出す。結果の型は int であり,通常の算術変換が行われる。
「7.7 等値演算子」の項には
== (等しい) と != (等しくない) の演算子は,優先順位が低いことを除けば関係演算子と同じようなものである。(a>b==c<d は a<b と c<d が同じ真理値をとれば 1 となる。)
「7.11 論理的 AND 演算子」の項には
&& 演算子は左から右へ適用される。これは,両被演算数が非零のとき 1 を返し,そうでなければ 0 を返す。
「7.12 論理的 OR 演算子」の項には
|| 演算子は左から右へ適用される。これは,どちらかのオペランドが非零であれば 1 を返し,そうでない場合は 0 を返す。
ANSI 規格化以前の C言語の仕様として 真=1 が明確に書かれており、それ以外の実装が存在するとは俄かには信じがたいのですが 真= -1 の処理系があるというのは事実でしょうか? 具体的な処理系を挙げていただけると嬉しいです。