こんにちは｡ お帰りなさい｡ この講義では､
プログラミング言語cがサポートする基本的な演算子について説明します｡
演算子は､ ある種の操作を行う機能を表す特別な記号です｡
そこで､ この講義では基本的に4種類の演算子について説明することにします｡
算術演算子､ 論理演算子､
代入演算子､ 関係演算子｡
それから､ 別の講義でビット演算子や､ 演算子には見えないけど特殊な演算子､
サイズ演算子やキャスト演算子についても説明する予定です｡
ですから､ 算術演算子はおそらく最も常識的なものであり､
最も馴染みのあるものでしょう｡ 数学の関数で､ 2つのオペランドを受け取って計算を実行します｡
infixなので､ 演算子とオペランド間があります｡
論理演算子は､ ブール演算子と呼ばれることもあり､ ブール値の結果を返す演算子である｡
真か偽の値､ それがブール値です｡
つまり､ 本当にただの条件演算子なんです｡
それは､ 1つまたは2つ以上の他の式のブール結果に基づくものである｡
代入演算子は､ 変数と値を等しく設定するだけです｡
右辺の式の値を左辺の変数に代入する｡
つまり､ 右オペランドと左オペランドということですね｡
繰り返しになりますが､ infixです｡
そして､ 関係演算子で変数同士を比較します｡
つまり､ これは比較可能なタイプの順序で､ 以下と以上ということです｡
しかし､ さまざまなオペレーターがたくさんいるので､ ひとつひとつ見ていきましょう｡
Cは超リッチなセットをサポートします｡
つまり､ 最初のものは､ cのこれらの算術演算子である｡
これらは数学的な機能である｡ そこで､ ネットで見つけたチュートリアルのポイントサイトで見つけた小さな表があるのですが､
これがいいんです｡
そして､ これはcでサポートされているすべての算術演算子をまとめたものである｡
だから､ 数学と同じように基本的なもの｡ 特に目新しいことはありません｡
表の左側が演算子で､ 真ん中が何をするものかの説明､
そして右側が例題です｡
つまり､ オペランドに足し算をするプラス記号ですね｡
infixです｡ 2つのオペランドの間にあります｡
つまり､ 変数を追加するか､ 定数の組み合わせを変数に追加するか､
定数だけを追加するかということです｡
そして､ これは､ a＋b＝30と言うことです｡
しかし､ 実際の演算子やオペランドは､ ただのプラスbです｡
そして､ それが手本になるのでしょう｡
マイナスは､ 2 つのオペランド､ a から b を引き算します｡
つまり､ aが20でbが10､ あるいはbがマイナス10であれば､
aマイナスbは実際にはマイナス10に等しくなる可能性があります｡
アスタリスクは乗算用です｡
オペランド間に再びinfixを入れる｡
ディビジョンとは､ フォワードスラッシュのことです｡
パーセントはモジュラス演算子です｡ これは余剰演算子である｡
では､ 仮に変数パーセントaのようなものがあったとして､
それは何に相当するのでしょう｡ bが20でaが12の場合､
modulus演算子は20を12で割った余りである8を返します｡
プラス・プラス､ マイナス・マイナス､ これらは具体的な増加・減少の演算子です｡
この演算子は､ 今でも算術演算子と呼ばれていますが､ 一般的にはループの中でコードを繰り返すときにしか目にしませんが､ 常に目にするわけではありません｡
この例では､
基本的に変数を1ずつ増やすか､ 何か他のことをしている場合は特定の値を増やしています｡
でも､
だから､ プラス・プラスをやっても､ aが何であれ､ 5だったら､ 6にはならない｡
そして､ デクリメント演算子があり､ 整数値を1ずつ減らしていくので､
マイナスマイナスとなる｡
そして､ プラス・プラスとマイナス・マイナスは､ 変数の後にあることにお気づきでしょう｡
これをpostfixという｡
つまり､ 式の中に変数がある場合､ 実際にはその文の後まで余分な1つは代入されないということです｡
接頭辞なら前に割り振られる｡
そこで､
これらの演算操作のコードブロックの例を挙げて､ もう少し理解しやすいように説明しましょう｡
これがコードブロック､ これがメインルーチンです｡
もうお馴染みですね｡ 変数をいくつか作って､ それに対していくつかの操作を行い､
それをプリントアウトするだけです｡
そして､ 整数を作るだけです｡ また､ floatを作って計算したり､ doubleを作ってもいいのですが､
ここでは基本的なものだけにします｡
aは33に等しいとする｡
整数型の変数をもう一つ作り､ それを15に代入します｡
つまり､ 宣言と代入を1つのステートメントで行っているわけです｡
そして､ 結果変数を用意するだけです｡
そして､ これは0に初期化され､ ここで計算を開始することができます｡
cと言いながら､
課題をこなすことができる｡ 課題については､ 特に正式に学んだわけではありませんが､
課題が何であるかは知っています｡ アサインはデータを取って､ そのデータをその変数に入れることです｡
つまり､
cイコールは､ 右辺にあるものをすべて取り､ その結果をその変数に入れるということです｡
つまり､ a＋bとすると､ これもまた普通の数学のルーチンにしか見えませんし､
実際そうです｡ 33に15を足しただけで､ cの値は何と48になってしまうのです｡
それで､ その値をプリントアウトすればいいんです｡
フォーマット指定子を使って､ cはパーセントdであると言って､ cをプリントアウトすればいいのです｡
それから､ ラインフィードもできるかもしれませんね｡
そうすると､ 数字が2つ増えるだけなんです｡ それくらい基本的なことです｡ それだけでいいんです｡
表示しているだけです｡ ですから､ このプログラムを実行すると､
33＋15の足し算が表示されることになります｡
これを再コンパイルして保存し､ ビルドと言い､ 実行を保存します｡
ウイルススキャナの後に実行すると､ cが48と表示されるのがわかると思います｡
だから､ これらを使って遊ぶことができるのです｡ つまり､ これは基本中の基本なんです｡ つまり､ a＋bはマイナス､
アスタリスクは掛け算､ そしてフォワードスラッシュは割り算､
そしてパーセント記号はモジュラスというわけです｡
というのも､ 33を15で割ると2になり､ 余りは3だから､
この場合､ 結果は3になる｡
これを保存して､ 実行を終了することを確認します｡
そして､ 実行すると､
余りがあるので､ cは3に等しいことがわかります｡
それ以外は､ かなり基本的なことです｡ プラスαで重要なのは､ 前置詞と後置詞を理解することです｡
ということは､ これは実際に1つのステートメントで行うときに､ より関連性があるのですが､ printfとします｡
つまり､ プラス・プラスをプリントアウトするとすると､
aを1だけインクリメントしてプリントアウトするので､ プリントアウトされるのは34です｡
でも､
単文でやるのは､ その後だから同じ行でやるんでしょう｡
つまり､ 実際にここに表示されるのは33個だけなのです｡
次の行まで実際にaをインクリメントするわけではありません｡
これを実行すると､ 33とプリントアウトされるのがわかると思います｡
これで､ aプラスaをやるかどうかの違いです｡
a plus plus aを実行すると､ 同じように1ずつ増えていきますが､ ここでは1ずつ増えていき､
ステートメントが実行される前に増えていくという違いがあります｡
ここで､
いくつかの警告が表示されただけで､
エラーは発生していないことに気づきます｡
実行すると､
答えが34になることがわかります｡ そして､ プラス変数名と変数名プラス・プラスの違いを知ることは重要です｡
それをプリフィックス､ ポストフィックスと呼んでいるだけです｡
マイナス・マイナスも同様だろう｡
だから､ それらを念頭に置いてユナリーを作ってください｡
これらはオペランドが1つしかないため単項演算子でもある｡
他のものは､ オペランドの間に演算子があるので二項演算子です｡
しかし､ マイナス・マイナスとプラス・プラスを理解すること｡
また､ 変数の前に置くと､ 実際にインクリメントやデクリメントを行うときに､
変数の後に置くと理解できます｡
そしてまた､ 変数の後にあれば､
コード行を実行する前に､ その場で増減します｡
変数の前にumがあれば､
コード行を実行し､ ステートメントを実行した後､ インクリメントまたはデクリメントを実行することになります｡
でも､ ウィンドウを開いて､ いろいろな演算式を使ってみて､
どう動くか試してみてください｡
では､ 他の種類の演算子について説明しましょう｡
次の演算子群は､ 論理演算子と呼ばれるものである｡
そして､ この意味は､ 基本的に条件付き型演算子であることを定義しました｡
これらの結果はブール値､
つまり真か偽の値を返す｡
つまり､ 論理演算子を表す記号はアンパサンドampersandである｡
2本の平行棒と､ 感嘆符｡
アンパサンドampersandは､ 論理演算子and operatorと呼ばれます｡
また､ 左辺と右辺の2つのオペランドを取る三項演算子でもあります｡
基本的には､
各オペランドが0以外であれば､ 条件は真となる｡
そして､ 0でないものは1､ つまり真を意味するわけです｡ つまり､ aが真でbが真なら､
答えは真になるわけです｡
aが偽でbが真の場合､
答えは偽となる｡ aが偽でbが偽なら､ 答えは偽です｡
そこで改めて､ その例をいくつか挙げてみます｡
そして､ 平行棒は論理演算子か演算子です｡ 繰り返しになりますが､ これは数学の授業と似ているはずなので､
あまり時間をかけたくないんです｡ しかし､ 2つのオペランドのいずれかが0以外であれば､
どちらかが真になるのです｡ つまり､ aが真でbが偽なら真ということです｡
そして､ これらは値を返す式である｡
つまり､ aが真でbが偽なら､ その返り値は真となる｡
そして､ 感嘆符を表すnot演算子ですが､ これはオペランドの論理状態を反転させるだけです｡
そのため､ もし条件が真であれば､ falseを返すことになる｡
だから､ not aと言えば感嘆符､ aはtrueだったaはfalseになる｡
notを括弧の外に置くと､ aやbの評価値が何であれ､
今度はその逆の値になる｡
それでは､ 改めていくつかの例とコードブロックを見てみましょう｡
ここにコールドブロックがあります｡ そしてまた､ 論理演算子を実演するために､ いくつかの変数を作成するつもりです｡
もう一度､ いくつかの整数を作る｡
aを12､ bを20とする｡
コンディションを使いたくないので､
アンダースコアのboolを作成して､ それをresultsに割り当てます｡
そして､ いくつかのデータをプリントアウトするだけです｡
そこで､ これらの式が論理演算子を使った場合に､
どのような値を返すのかを確認したい｡
そこで､ ここでは整数であるパーセントdをプリントアウトすることにします｡
なぜなら､
ブール式は単なる整数であることを忘れてはならないからです｡
ブール変数は整数である｡ つまり､ ブール値が1であれば､ それは真であることを意味します｡
0なら偽｡ それ以外のものは通常1､ それは本当です｡
だから､ その結果をプリントアウトするだけなんです｡
そして､ それにいくつかのデータを割り当てていきます｡ つまり､ resultsがaとbに等しいとしたら､
これは数字ですから､ 何の意味も持ちません｡
そこで､ aをtrueに初期化し､ 再びブール値を使用することにしましょう｡
そして､ ここでは､ これは本当だ､
これは本当だと言うことにします｡
そして､ アンパサンドを使うということは､
返り値が真になるためには､ aとbの両方が真でなければならない､ ということを意味している｡
つまり､ 1が真を表すので､ 結果は1をプリントアウトするはずです｡
では､
これを構築して､ 正しい名前空間を使用しなければならないことを確認しましょう｡
だから､
今は正しいインクルードをやっていないから､
真と1を表すだけで､ 大したことはないんです｡ では､ 実行すると､ true, 1 と報告されるはずですが､
1 と報告されます｡
ここで､ これらのうちどれかを真でないものに変えると､ 仮に0とすると､
結果が真になるためにはaとbの両方が真でなければならないので､
結果は偽になるのです｡
ですから､ これをビルドして実行すると､
結果はfalseなので0になることがわかります｡
つまり､ aかbのどちらかを偽を意味する0に変えても､
aもbも真でなければならないので､ 結果は偽となる｡
今､ 平行棒のパラレルバーと言ったら､
aかbか､ どちらか一方だけが真でなければ結果は成り立たない｡
したがって､ この場合､ 結果は1になるはずです｡
では､ これをビルドして実行してみましょう｡
そして今､ 1という値が出ています｡
だから､ どちらか一方だけが真実でなければならないのです｡ これは､ if文や条件文､
意思決定について話すときに､
もっと応用できそうですが､ ここではブール論理を実証しているのです｡
今はどちらも偽物です｡ つまり､ これは0を返すべきで､
それは偽であり､ 0を返しているのです､
だからとてもきれいです｡ そして最後は､ 感嘆符のような「Not」マークで､
その逆を行うだけです｡
つまり､ もし私がnot
aと言えば､ aが0に等しい場合､
aは今度は1に等しくなる､ あるいはresultがそうなり､ resultは1に等しくなる､ ということになります｡
以上､ 3つの論理演算子でした｡ ここでも､ 普段の判断材料として使われることになる｡
では､ 次に別のオペレーターの話をしましょう｡
さて､ ここからは代入演算子です｡ 少なくとも単純な代入演算子であるイコールシンボルにはかなり慣れ親しんでいる｡
等号はデータを割り当てるもので､
これはごく基本的なことです｡ Cはa＋bに等しい､ cはa＋bの結果になりそうだ｡
今は複合演算子というのがあって､ プラスイコール､
マイナスイコール､ スターイコールができるんです｡
プラスイコールは､ 足し算と代入演算子です｡
つまり､ 右のオペランドと左のオペランドを足して､ その結果を左のオペランドに代入しているのです｡
つまり､ c＋aはc＋aに等しいと言うことができるのです｡
マイナスは､ 引き算であることを除けば､ まったく同じことを意味します｡ 引き算をして､ 割り算をしているんですね｡
つまり､ 左オペランドから右オペランドを引いてから､ データを代入するわけです｡
だから､ cマイナスイコールaというのは､ 本当はcイコールcマイナスaなんです｡
これは､ プラスイコール､ マイナスイコールという略記法です｡
2つの操作を1つのステートメントで行うので､
少し速く書くことができます｡
そして､ 同じようにスターイコール､ 掛け算､ 割り算をする｡
つまり､ c star equals a は c equals c times a と等価である｡
それはとても分かりやすいと思います｡
他の代入演算子も､
除算を使う以外は同じようなものです｡ つまり､ 除算イコール除算して符号をつけるということですね｡
パーセントは､ モジュレーションを行い､ その結果を代入する｡
だから､ それらはとても簡単なことなのです｡
それから､ 他のものもありますが､ それはまた別の講義で詳しくお話しします｡
だから､ 本当に全く違うので､ ここでは触れないことにします｡
これらはビット演算子と呼ばれるもので､
left leftです｡ ここで言いたいのは､ これから話すビット演算子については､
単一文の中で代入することもできるということです｡
だから､ シフトして､ 左シフトと右シフトをして､ 代入して､
less than less than equalsをやって､ greater than any greater than equalsを書けばいいんです｡
そしてまた､ アンパサンド､ ニンジン､ 平行棒は､ ビットの上で物事を行うことに関係しています｡
その話はまた後日しますが､ これらは代入演算子の一部です｡
だから､ 代入演算子はとても簡単で､ データを代入して､ 実際に式をやりたい場合は､
いくつかの式をやってから代入する､ 組み合わせのものをやるわけです｡
関係演算子は比較演算子である｡ 2つの価値を比較するのです｡
だから､ これは重要なことで､ イコールイコールなんです｡ 2つの変数の値を比較します｡
そして､ もし同じであれば､ trueを返します｡ なぜなら､ trueかfalseかブール値を表すブール式を返すからです｡
感嘆符イコールは､ 2つのオペランドの値が等しいかどうかをチェックします｡
だから､ aはbと等しくないというのは､ どう読んでもおかしい｡
aがtrueでbがtrueなら､ 両者は等しいのでfalseを返すことになりますね｡
つまり､ aはfalseでなければならないし､
bはtrueでなければならないし､ その逆もまた然りで､ trueを返すことになるのです｡ 大なり記号は､ aがbより大きいかどうかを調べている｡
記号より小さい､ aはbより小さい｡ 大は等しい､ aは等しいより大きい､
小は等しい｡
繰り返しになりますが､ これはすべて数学の基本的なことなんですね｡
これはとても簡単なことなので､ IDEでの例は割愛します｡
比較演算子は数学と同じで､ 大なり小なり等しい｡
これで､ 基本的な演算子である算術､ 論理､
代入､ 関係式について理解できたと思います｡
かなり使うので､ 理解する必要がある｡ あまり難しくなく､ 分かりやすいといいのですが｡
これはif文やdecision文で多く使われるので､
これらについてさらに大量の例を提供することになります｡ ありがとうございます｡