n;」を関数の中に書いた場合は、変数はスタック領域に作られます。関数が呼び出されたときにメインメモリ上に領域が確保され、関数を抜けるときに解放される変数となります。これを「ローカル変数へんすう」といいます(図2-2)。関数の引数も、ローカル変数です。n;」を関数の外に書いた場合は、変数は静的領域に作られます。プログラムが実行されたときに確保され、プログラムを終了するときに解放される変数となります。これを「グローバル変数へんすう」といいます(図2-3)。グローバル変数プログラム自体も静的領域に配置されます。world!\n"」と書いたときの文字列リテラルなども静的領域に配置されます。実際にC言語で変数を作るソースコードを書くと、図2-4のようになります。変数を使ったソースコード変数aは関数の外にあるので、グローバル変数です。変数bは関数fの中なので、ローカル変数です。引数はローカル変数として扱われるので、引数cもローカル変数です。3演算子それでは、これまで解説したリテラルや変数を使って、コンピュータに様々な計算をさせましょう。多くの言語では、数式を書くのと同じ書き方で計算式が表現できます。C言語では、図3-1のように書けます。「1+(5-3)*4/2」というのは、数式でいう「1+(5-3)×4÷2」と同様です。「×」「÷」という記号の半角文字は存在しないので、ほとんどの言語では「*」「/」で代用されます。数式と同様に、掛け算や割り算は足し算や引き算よりも先に計算されます。括弧で計算順序も変えられます。このプログラムを実行すると、画面には「5」が表示されます。「+-*/」といった記号は、値を演算するので「演算子えんざんし」と呼ばれます。この他にもたくさんの演算子が存在します。以下に主要なものを紹介します。だいにゅうえんざんし」は、変数に値を入れる演算子です。C言語やJavaなどでは「=」の記号が使われますが、数学のイコールとは意味が違うので注意してください。「=」の右側に書いた値を、左側に書いた変数に代入します(図3-2)。代入演算子6行目で「3+4」の値を「n」に代入しています。nには「7」が入りますので、画面には「7」が表示されます。ひかくえんざんし」は、2つの値を比較する演算子です。C言語やJavaなどで2つの値が等しいか否かを比較するときは「==」の演算子を使います。これは数学のイコールに近いです。比較演算子は、比較条件を満たせば論理型の「真」が返り、満たさなければ「偽」が返ります。C++やC#では「==」の左右の値が等しければbool型の「trueトゥルー」が、異なれば「falseフォルス」が返ります。trueは真、falseは偽を意味する値です。C言語の古典的な仕様には論理型が存在しないため、「==」の左右が等しければint型の「0以外」の値が、異なれば「0」が返ります。C言語の比較演算子には他に、表3-1のものがあります。ろんりえんざんし」という演算子もあり、これは日本語で「または」「かつ」の意味を表すものです。「または」を意味するものを「論理和ろんりわ」といい、C言語では「||」で表します。「かつ」は「論理積ろんりせき」といい、C言語では「&&」です。C言語で「n==1||n==2」と書くと「nは1に等しい、または、nは2に等しい」という条件式になります。実際にはこれらは、論理型の2つの値を受け取って論理型の結果を返すだけの演算子です(表3-2)(表3-3)。「真&&偽」の結果は「偽」の値になります。論理演算子には、真偽を反転させる「論理否定」があり、C言語では「!」の記号を使って「!(n==1)」のように書きます(表3-4)。偽3.4ビット演算子C言語やJavaなどには、数値を1ビット単位で操作するための「ビット演算子えんざんし」があります。論理型では1つの値に1バイト以上の領域を消費しますが、ビット演算子を用いると1ビット単位で操作できるのでメインメモリの領域を節約できます(図3-3)。論理型とビット演算ビット演算子には、0を偽、1を真とみなして各ビットに対し論理和や論理積を行う演算子や、ビット全体を左右にずらす「ビットシフト」などがあります。3.5その他の演算子C言語やJavaなどで「n=n+5;」と書くことは、変数nの値を5増やすことになります。nに2が入っていたときに「n=n+5;」を実行すると、nは7になり、元の値から5増えたことがわかります。このような操作はよく行われるので、C言語やJavaなどには「+=」という演算子が用意され、「n=n+5;」は「n+=5;」と書けるようになっています。足し算だけでなく、「-=」「*=」「/=」なども用意されており、例えば「n*=2;」と書くと「n=n*2;」と同等なので、nの値が2倍になります。「n=n+1;」と「n=n-1;」のような、変数を1だけ増減させたい場面は多いため、「n=n+1」のことは「n++;」もしくは「++n;」と書け、「n=n-1;」のことは「n--;」もしくは「--n;」と書けるようになっています。「++」は「インクリメント演算子」、「--」は「デクリメント演算子」と呼ばれます。C言語の拡張版である「C++」という言語の名前には、C言語を一歩進める意味が込められています。値の型を他の型に変換する演算子「キャスト演算子えんざんし」もよく使われます。型を変換する操作を「キャスト」といい、C言語では変換後の型を括弧で囲んで表現します。double型の値「5.3」をint型にキャストするときは「(int)5.3」と書きます。この場合、int型は整数型で小数が扱えないため、通常はキャスト時に小数点以下が切り捨てられて「5」になります。割り算の余りを計算する「剰余演算子」もたまに使われます。C言語やJavaなどでは「%」の記号を用います。5÷3の余りは2ですので、「5%3」は「2」です。この他にも様々な演算子が存在します。「+」「-」よりも「*」「/」のほうが先に計算されると言いましたが、同様にすべての演算子には計算の「優先順位ゆうせんじゅんい」が定められています。C言語で「n==1||n==2+3」と書くと、「(n==1)||(n==(2+3))」と解釈されます。「1+2+3」と書くと「(1+2)+3」と解釈されますが、「a*=b*=c」と書くと「a*=(b*=c)」と解釈されます。このように同じ優先順位を並べたときには左から計算されるものと右から計算されるものがあり、これを「結合規則けつごうきそく」といいます。左から計算されるものを「左結合ひだりけつごう」、右から計算されるものを「右結合みぎけつごう」といいます。今回は、メインメモリに値を保存する「変数」と、それを用いて計算する「演算子」について解説しました。次回は、プログラムを上から下へと実行させるだけでなく、さらに条件に応じて分岐や繰り返しを行う方法について解説していきます。前へ目次ホームへ次へ©Kuina-chan1579922058jaf。