Cygwinでデバッグ/数学の表記との違い
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[Cygwinでデバッグ]]
#contents
** 数学の表記との違い [#t1b0b7a8]
*** 等号と代入、そして lvalue [#s4ba0d4d]
数学で考えると、次の2つの等式は同じ意味です。
(1) a = 2
(2) 2 = a
さて、C言語のプログラムで考えると、少し事情が変わります。...
(1') if (a == 2) { ... }
(2') if (2 == a) { ... }
このように書けば、(1')(2') とも同じ意味になります。
しかし、もし代入を意味していれば、状況が異なります。代入...
(1'') a = 2; // OK
(2'') 2 = a; // NG
これは、代入される(できる)ものは特別なものである、とい...
左辺値は変数であればよいのかというと、そうでもありません...
a = 2; // OK
a+1 = 3; // NG
同じように左辺値として x は大丈夫でも、x*x はエラーになり...
(a) x*x = 4; // NG
(b) x = sqrt(4); // OK
(c) x = -sqrt(4); // OK(?)
> (b)(c) のように、逆関数が1通りでない場合にどうすればよ...
*** 不等号 [#j099ac58]
数学では「0≦x<10」のような表記をしますが、C言語の条件文...
(1) if ( 0 <= x < 10 ) { ... } // NG
(2) if ( 0 <= x && x < 10 ) { ... } // OK
(3) if ( x >= 0 && x < 10 ) { ... } // OK
(1) は、エラーにはなりませんが違う意味になってしまいます...
> (1) の表現には、gcc だと警告レベルを上げると検出してく...
> ちなみに (1) の式は ((0<=x) < 10) と評価されます。「(0<...
(2) と (3) はどちらも同じ意味ですが、数直線を思い描く人は...
さて、上の条件の否定をどう書くのか考えてみます。いろいろ...
if ( 0 <= x && x < 10 ) { ... } // 否定する前
(a) if (!(0 <= x && x < 10) ) { ... } // 単純に ! をつ...
(b) if (!(0 <= x) ||!(x < 10) ) { ... } // ! を分配して ...
(c) if ( 0 > x || x >= 10 ) { ... } // ! をやめて不...
(d) if ( x < 0 || x >= 10 ) { ... } // 左に変数が来...
(e) if ( x < 0 || 10 <= x ) { ... } // 不等号の向き...
どれも同じ意味ですが、よく使うのは (a), (d), (e) あたりで...
余談ですが、"<=" と "=<" のどちらか迷う人が多いですが、正...
> C言語の2文字の演算子は = がいつでも後ろですが、Perl で...
*** 比較演算 [#f925bdd3]
数学で考えれば a+b と a<b は計算の質が異なります。a+b は...
ところが、C言語をはじめとする多くのコンピュータ言語では、...
> 1 とか 0 とかの値は、言語によって若干のバリエーションが...
つまり、c = a+b とすれば c に a+b の値を代入できるように...
if ( a < b ) { ... } // 短縮(?)版
int cond = (a < b); // 分割版
if ( cond ) { ... }
次はよく使う例です。無限ループを
while ( 0 == 0 ) { ... }
と書くことがありますが、0==0 の演算結果は、成り立つので 1...
while ( 1 ) { ... }
と表記するのと同じ意味になります。
> 条件式は 0 以外は成立とみなされるので、while (2) {...} ...
x が 0 かどうかを判定する関数 is_zero(x) は次のような2通...
int is_zero(int x) {
if (x == 0) return 1;
else return 0;
}
int is_zero(int x) { // 短縮版
return (x == 0);
}
このような関数を呼び出す上では注意が必要です。常套句があ...
if ( is_zero(a) ) { ... }
if の条件式の中で比較を行っていないことに注目して下さい。...
否定の条件は次のように書きます。
if ( !is_zero(a) ) { ... }
これは if a is not zero, then ... のように理解します。
> C言語の標準関数に isalpha(c) のようなものがあります。不...
> C 言語ではこのような関数・変数に int 型を用いるため、バ...
終了行:
[[Cygwinでデバッグ]]
#contents
** 数学の表記との違い [#t1b0b7a8]
*** 等号と代入、そして lvalue [#s4ba0d4d]
数学で考えると、次の2つの等式は同じ意味です。
(1) a = 2
(2) 2 = a
さて、C言語のプログラムで考えると、少し事情が変わります。...
(1') if (a == 2) { ... }
(2') if (2 == a) { ... }
このように書けば、(1')(2') とも同じ意味になります。
しかし、もし代入を意味していれば、状況が異なります。代入...
(1'') a = 2; // OK
(2'') 2 = a; // NG
これは、代入される(できる)ものは特別なものである、とい...
左辺値は変数であればよいのかというと、そうでもありません...
a = 2; // OK
a+1 = 3; // NG
同じように左辺値として x は大丈夫でも、x*x はエラーになり...
(a) x*x = 4; // NG
(b) x = sqrt(4); // OK
(c) x = -sqrt(4); // OK(?)
> (b)(c) のように、逆関数が1通りでない場合にどうすればよ...
*** 不等号 [#j099ac58]
数学では「0≦x<10」のような表記をしますが、C言語の条件文...
(1) if ( 0 <= x < 10 ) { ... } // NG
(2) if ( 0 <= x && x < 10 ) { ... } // OK
(3) if ( x >= 0 && x < 10 ) { ... } // OK
(1) は、エラーにはなりませんが違う意味になってしまいます...
> (1) の表現には、gcc だと警告レベルを上げると検出してく...
> ちなみに (1) の式は ((0<=x) < 10) と評価されます。「(0<...
(2) と (3) はどちらも同じ意味ですが、数直線を思い描く人は...
さて、上の条件の否定をどう書くのか考えてみます。いろいろ...
if ( 0 <= x && x < 10 ) { ... } // 否定する前
(a) if (!(0 <= x && x < 10) ) { ... } // 単純に ! をつ...
(b) if (!(0 <= x) ||!(x < 10) ) { ... } // ! を分配して ...
(c) if ( 0 > x || x >= 10 ) { ... } // ! をやめて不...
(d) if ( x < 0 || x >= 10 ) { ... } // 左に変数が来...
(e) if ( x < 0 || 10 <= x ) { ... } // 不等号の向き...
どれも同じ意味ですが、よく使うのは (a), (d), (e) あたりで...
余談ですが、"<=" と "=<" のどちらか迷う人が多いですが、正...
> C言語の2文字の演算子は = がいつでも後ろですが、Perl で...
*** 比較演算 [#f925bdd3]
数学で考えれば a+b と a<b は計算の質が異なります。a+b は...
ところが、C言語をはじめとする多くのコンピュータ言語では、...
> 1 とか 0 とかの値は、言語によって若干のバリエーションが...
つまり、c = a+b とすれば c に a+b の値を代入できるように...
if ( a < b ) { ... } // 短縮(?)版
int cond = (a < b); // 分割版
if ( cond ) { ... }
次はよく使う例です。無限ループを
while ( 0 == 0 ) { ... }
と書くことがありますが、0==0 の演算結果は、成り立つので 1...
while ( 1 ) { ... }
と表記するのと同じ意味になります。
> 条件式は 0 以外は成立とみなされるので、while (2) {...} ...
x が 0 かどうかを判定する関数 is_zero(x) は次のような2通...
int is_zero(int x) {
if (x == 0) return 1;
else return 0;
}
int is_zero(int x) { // 短縮版
return (x == 0);
}
このような関数を呼び出す上では注意が必要です。常套句があ...
if ( is_zero(a) ) { ... }
if の条件式の中で比較を行っていないことに注目して下さい。...
否定の条件は次のように書きます。
if ( !is_zero(a) ) { ... }
これは if a is not zero, then ... のように理解します。
> C言語の標準関数に isalpha(c) のようなものがあります。不...
> C 言語ではこのような関数・変数に int 型を用いるため、バ...
ページ名: