RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
以前に、変数について紹介した記事があったかと思います。
その時に、変数の値を計算する場合についてのことが書かれていました。
単純な四則演算、つまり足す、引く、掛ける、割る、の4つの計算の方法ですね。
この時は、この4つの演算についてしか記述しませんでしたが、
実はC言語で行うことのできる演算はまだまだ他にも沢山あったりするのです。
今日はそのことについて紹介していこうと思います。
・・・とその前に。まずは演算子と言う言葉の話から。
演算子と言うのは、「この演算をしますよ」という一種の命令みたいなものです。例えば足し算だったら+だし、引き算だったら-になりますね。
普通の計算でもそうですが、
演算子は演算をする際には必ず必要になってくる上、行う演算によって表記も変わってきますので、
この演算子をまず理解できないと、実際にどういった演算が行われているかが理解できなくなってしまうのです。
と云うわけで、これから紹介する演算では、演算と演算子、合わせて紹介を行っていくことにします。
まぁ今回紹介するのは演算子のなかでもほんの一部、特にメジャーな演算子のみとさせていただきます。
まずはインクリメント演算子。++とかです。
これらは何かというと、要するに今の変数に1足しますよ。という命令です。実際に書いてみると、
x++;
このような感じになります。これだと、変数xに1足すと言う意味になります。
既存のxの値に1足すという命令なので、xに元々何かしらの数字が入っていないと多分エラーか警告を吐くと思います。
因みにこのインクリメント演算子、前置式と後置式がありまして、前置式は++x;、後置式はx++;と表記します。
これはまぁどちらも変数xに1を足すという意味になるのですが、実はほんのちょっとだけ意味が変わってきます。
変わってくるのは例えばこういった場合。
int X=0;
printf("%d",++x);
例えばこの場合、表示される数は、xに1足されるので1になります。
でもこっちの場合はというと・・・
int X=0;
printf("%d",x++);
なんと0になるのです。
というのも、実は++xの場合は演算を実行してからprintfにxの値を送信しているので
xは1の状態でprintfに送られているのですが、
x++の場合はprintfにxの値を送信してから演算を実行しているのです。
つまり最終的にプログラムではxの値はどちらも1になっているのに、
printfの出力結果はx++と++xで変わってきてしまうのです。
こういった演算子がインクリメント演算子です。
また、同様に--で表記するデクリメント演算子と言う演算子もあります。
これはインクリメント演算子とは真逆で、元の値から1引くと言う演算になっています。
次に紹介するのは論理演算子と言う演算子です。
論理演算子にも色々ありますが、今日紹介するのは&&と||です。
前者が論理&演算子、後者が論理OR演算子と呼ばれる演算子です。
文章で説明するのもいいですが、結構面倒なので実際のプログラムで説明します。
まずは論理&演算子です。例えば論理&演算子だとこんなプログラムが書けます。
if((x==5) && (y==2))
これだと、&&演算子を使うことで、ifの条件が、xが5のときとyが2のとき、両方が成立している場合になります。
このように、論理&演算子では、
「複数の条件が同時に成立している」という条件を作り出すことができる演算子と言うことになります。
同様に論理OR演算子の場合はこのようなプログラムが書けます。
if((x==5) || (y==2))
これだと、||演算子を使うことで、ifの条件が、xが5のときとyが2のとき、どちらかが成立している場合になります。
このように、論理OR演算子では、
「複数の条件のどちらかが成立している」という条件を作り出すことができる演算子と言うことになります。
つまり、この演算子を使うことによってROBOLABやNXT-Gでいう、複合分岐がたった一行で書くことができると言う訳です。
特にロボット等の組み込みプログラムだと、あれやこれやと意味不明な条件の複合が大量に出現しますので、
これを使用することで非常に便利にプログラムを記述することができるようになります。
と云うわけで今日は演算子と演算の紹介でした。演算にはまだまだ沢山の種類が存在しますし、
演算によって優先度なんかも発生したりしますので今後はこういった内容についても記述していこうと思います。
例えばさんすうの世界でも、+より×の方が、×より更に()の方が優先度が高いですよね。
という訳で今日の記事はこの辺で。
(^・ω・)ノRadiumProduction in RoboCup Junior
その時に、変数の値を計算する場合についてのことが書かれていました。
単純な四則演算、つまり足す、引く、掛ける、割る、の4つの計算の方法ですね。
この時は、この4つの演算についてしか記述しませんでしたが、
実はC言語で行うことのできる演算はまだまだ他にも沢山あったりするのです。
今日はそのことについて紹介していこうと思います。
・・・とその前に。まずは演算子と言う言葉の話から。
演算子と言うのは、「この演算をしますよ」という一種の命令みたいなものです。例えば足し算だったら+だし、引き算だったら-になりますね。
普通の計算でもそうですが、
演算子は演算をする際には必ず必要になってくる上、行う演算によって表記も変わってきますので、
この演算子をまず理解できないと、実際にどういった演算が行われているかが理解できなくなってしまうのです。
と云うわけで、これから紹介する演算では、演算と演算子、合わせて紹介を行っていくことにします。
まぁ今回紹介するのは演算子のなかでもほんの一部、特にメジャーな演算子のみとさせていただきます。
まずはインクリメント演算子。++とかです。
これらは何かというと、要するに今の変数に1足しますよ。という命令です。実際に書いてみると、
x++;
このような感じになります。これだと、変数xに1足すと言う意味になります。
既存のxの値に1足すという命令なので、xに元々何かしらの数字が入っていないと多分エラーか警告を吐くと思います。
因みにこのインクリメント演算子、前置式と後置式がありまして、前置式は++x;、後置式はx++;と表記します。
これはまぁどちらも変数xに1を足すという意味になるのですが、実はほんのちょっとだけ意味が変わってきます。
変わってくるのは例えばこういった場合。
int X=0;
printf("%d",++x);
例えばこの場合、表示される数は、xに1足されるので1になります。
でもこっちの場合はというと・・・
int X=0;
printf("%d",x++);
なんと0になるのです。
というのも、実は++xの場合は演算を実行してからprintfにxの値を送信しているので
xは1の状態でprintfに送られているのですが、
x++の場合はprintfにxの値を送信してから演算を実行しているのです。
つまり最終的にプログラムではxの値はどちらも1になっているのに、
printfの出力結果はx++と++xで変わってきてしまうのです。
こういった演算子がインクリメント演算子です。
また、同様に--で表記するデクリメント演算子と言う演算子もあります。
これはインクリメント演算子とは真逆で、元の値から1引くと言う演算になっています。
次に紹介するのは論理演算子と言う演算子です。
論理演算子にも色々ありますが、今日紹介するのは&&と||です。
前者が論理&演算子、後者が論理OR演算子と呼ばれる演算子です。
文章で説明するのもいいですが、結構面倒なので実際のプログラムで説明します。
まずは論理&演算子です。例えば論理&演算子だとこんなプログラムが書けます。
if((x==5) && (y==2))
これだと、&&演算子を使うことで、ifの条件が、xが5のときとyが2のとき、両方が成立している場合になります。
このように、論理&演算子では、
「複数の条件が同時に成立している」という条件を作り出すことができる演算子と言うことになります。
同様に論理OR演算子の場合はこのようなプログラムが書けます。
if((x==5) || (y==2))
これだと、||演算子を使うことで、ifの条件が、xが5のときとyが2のとき、どちらかが成立している場合になります。
このように、論理OR演算子では、
「複数の条件のどちらかが成立している」という条件を作り出すことができる演算子と言うことになります。
つまり、この演算子を使うことによってROBOLABやNXT-Gでいう、複合分岐がたった一行で書くことができると言う訳です。
特にロボット等の組み込みプログラムだと、あれやこれやと意味不明な条件の複合が大量に出現しますので、
これを使用することで非常に便利にプログラムを記述することができるようになります。
と云うわけで今日は演算子と演算の紹介でした。演算にはまだまだ沢山の種類が存在しますし、
演算によって優先度なんかも発生したりしますので今後はこういった内容についても記述していこうと思います。
例えばさんすうの世界でも、+より×の方が、×より更に()の方が優先度が高いですよね。
という訳で今日の記事はこの辺で。
(^・ω・)ノRadiumProduction in RoboCup Junior
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(01/03)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
(03/15)
(01/01)
(05/07)
プロフィール
HN:
Luz
性別:
男性
アーカイブ