lC言語 演算子 '96.11.15  ('99. 1.3 一部訂正)
l.お知らせ 内容 LINK FILE   HTML Win PC Unix MS-DOS C C++ Mfc Java 
.C言語_ 3 フォ-マットコ-ド 6 演算子 9 FOR  集合デ-タ  目的別
1 表示してみる 4 変数と定数 7 条件判断 10 WHIILE  ポインタ     
2 エスケ-プ コ-ド 5 デ-タ入力 8 分岐   未使用  関数   ★ 
演算子  算術演算子  代入演算子  比較演算子 
論理演算子  ビット演算子  ポインタ演算子  条件演算子
 
算術演算子と比較演算子をマスターしたら、他は後回しにしましょう。

演算子
数の計算をするなど、元になるデータを一定の規則に従って別なデータに変換することを演算といいます。
例 1+2=3 ... 1 と 2 を、加算の規則に従って 3 に変換します。
計算ではなく演算というのは、数の計算だけではなく文字なども、数に置き換えて処理するからです。

+や−などの、演算を表す記号を演算子といいます。
Cでは、次のような演算子が用意されています。

算術演算子
普通の計算を表わす記号です。
演算子 意味      用例   用例の説明
 +   加算      Z=X+Y
 -   減算      Z=X-Y
 *   乗算      Z=X*Y   Z=X×Y
 /   除算      Z=X/Y   Z=X÷Y
 %   剰余      Z=X%Y   Z には、X÷Y の余りが代入されます。
 ++  インクリメント Z++    Z=Z+1 つまり、Z を +1 します。
            Z=X+(++Y) Y を +1 してから、Z=X+Y を計算します。
            Z=X+(Y++) Z=X+Y を計算してから、Y を +1 します。
 --  デクリメント  Z--    Z=Z-1 つまり、Z を -1 します。
            Z=X+(--Y) Y を -1 してから、Z=X+Y を計算します。
            Z=X+(Y--) Z=X+Y を計算してから、Y を -1 します。
プレ・インクリメント(pre-increment) : 変数の値を、使う前に +1 すること
ポスト・インリメント(post-increment) : 変数の値を、使った後で +1 すること
プレ・デクリメント(pre-decrement) : 変数の値を、使う前に -1 すること
ポスト・デクリメント(post-decrement) : 変数の値を、使った後で -1 すること

演算子の両側には、スペースやタブを書くことができます。
Z = X + Y; は、Z=X+Y; や Z =X+ Y; のように書くことができます。
演算の順序はカッコを使って、Z=(X+2)((Y+3)+4)) のように指定します。

代入演算子
変数に、数値や演算結果などの値を代入します。

演算子 意味      用例  用例の説明
  =  代入      X=5
 +=  加算して代入  X+=5  X=X+5
 -=  減算して代入  X-=5  X=X-5
 *=  乗算して代入  X*=5  X=X*5
 /=  剰余して代入  X/=5  X=X/5
その他
演算子 意味
%=  剰余を代入
>>=  右シフトして代入
<<=  左シフトして代入
&=  ビットの AND を代入
^=  ビットの XOR を代入
X=5; は、5 を Xに代入します。
X+=5; は、X+5 を Xに代入します。
Z=(X+=5); は、X+5 を Xに代入し、それを Z に代入します。

比較演算子
指定された条件に一致するかどうかを判定するための演算です。
演算子 意味      用例  用例の意味(真である条件)
 ==  等しい     X==Y  X と Y が等しいならば真。等しくなければ偽。
 !=  等しくない   X!=Y  X と Y が等しくなければ真。
  >  大なり     X >Y  X が Y よりも大きければ真。
  <  小なり     X <Y  X が Y よりも小さければ真。
 >=  大または等しい X>=Y  X が Y よりも大きいか、等しければ真。
 <=  小または等しい X<=Y  X が Y よりも小さいか、等しければ真。
演算ですからその結果(答え)がありますが、その値は 0 か 1 だけです。
5==5 や、5!=2 のようにその条件式が正しいときは 1 になります。これを真(True)といいます。
3==1 や、3!=3 のようにその条件式が正しくないときは 0 になります。これを偽(True)といいます。

Z=(5==5); は、等しいという条件に一致するので、Z には 1 が代入されます。
Z=(3!=3); は、等しくないという条件に一致しないので、Z には 0 が代入されます。

条件式は次のように使用されます。
if(X==5)print("555");	/* X が 5 なら(真なら)、555 と表示します。*/
if(X > 5)print("大");	/* X が 6,7,8... なら、大と表示します。*/
if()は、()の中が 1=真のときだけ、その後の文を実行します。

論理演算子
(集合あるいはブール代数と呼ばれる数学の演算記号です。)
0 と 1 の組み合わせ状態を、0 と 1 に変換します。
論理積(AND)....両方とも 1 なら、1 に変換します。それ以外は 0 に変換します。
論理和(OR) ....両方共なら、0 に変換します。どちらかが 1 なら、1 に変換します。
論理否定(NOT)..1 なら 0 に、0 なら 1 に変換します。
演算子 意味    用例   用例の説明
 &&  論理積   Z=X&&Y  Z=(X AND Y)  Z に、X と Y の論理積が代入されます。
 ||  論理和   Z=X||Y  Z=(X OR Y)  Z に、X と Y の論理和代入されます。
  !  論理否定  Z= !X   Z=(NOT X)   Z に、X の否定が代入されます。
 And : 〜と〜  Or : 〜または〜  Not : 〜でない

Cのプログラムでは、0 と 1 以外の値を使って演算することが可能です。
その場合、0 以外は 1 として演算されます
Z = 5 && 0;	/* 5 は 1 と見なされ、Z には 1 が代入されます。*/
Z = ! 3;	/* 3 は 1 と見なされ、Z には 0 が代入されます。*/

Cでは主に、複数の条件に一致するかどうかを判定するために使います。
個々の条件を、1(一致)と 0(不一致)に置き換えて演算します。
演算の結果も 1(一致)と 0(不一致)で表わします。

論理演算子は次のように使用されます。
int X=5,Y=3;
if(X&&Y)printf("有");	/* X&&Y が 1 なので、有と表示されます。 */
if()は、()の中が 1=真のときだけ、その後の文を実行します。

比較演算子と組み合わせると、次のように使用できます。
Z=(X==5)||(X==3); /* X=5 または X=3 なら、Z には 1 が代入されます。*/
                  /* (X==5)と(X==3)を先に演算し、その後で || を演算します。*/
if((X==5)||(X==3))printf("奇");	/* X=5 または X=3 なら、奇と表示されます。*/
if(!(X==5))printf("遇");	/* X=5 以外のときに、遇と表示されます。*/

※ 現在のコンピュータのほとんど全ては、これら3っつの演算を行う素子の組み合わせによって、すべての処理を行っています。

ビット演算子
コンピュータのデータの最小単位である 0 と 1 のレベルで、データの処理(論理演算)を行います。
演算子 意味      用例   用例の説明
  &  ビット毎の AND Z=X &Y  Z には X&Y が代入されます。
  |   〃   OR   Z=X |Y
  ^   〃  XOR   Z=X ^Y
  ~   〃  NOT   Z=X ~Y
 >>  右シフト    Z=X>>Y  Z には、X を Y ビットシフトした値が代入されます。
 <<  左シフト    Z=X<<Y

例を示します。
53 は、コンピュータのメモリに 0011 0101   のように書かれています。
35 は、   〃        0010 0011    〃
53 | 35 は、         0011 0111   となります。( 10進数では  55 )
~(53|33) は、         1100 1000    〃       ( 10進数では 200 )
~(53|33)>>2 は、          11 001000   〃       ( 10進数では  50 )

Z=( 53|35 );		/* Z には  55 が代入されます。*/
Z=( ~(53|35) );		/* Z には 200 が代入されます。*/
Z=( ~(53|35) >>2 );	/* Z には  50 が代入されます。*/

なお、Z=X>>2 は、X の桁数が2つ少なくなるので、Z=X/2/2 と同じ事です。
   Z=X<<1 は、X の桁数が1つ多くなるので、Z=X*2 と同じです。

ポインタ演算子
変数名をそのポインタに変換したり、ポインタをそのポインタが示す変数の内容に変換したりします。
演算子 意味    用例   用例の説明
  *  内容    X=*P   変数 X に、ポインタ P が示す変数の内容を代入します。
  &  アドレス  P=&X   ポインタ変数 P に、変数 X のアドレスを代入します。
 ->  構造体メンバのポインタ
          X=S->A  変数 X に、構造体 S のメンバ A の内容を代入します。
X=S->A は、次の文と等価です。(詳細は集合データのページ参照。)
X=(*S).A
メモ : 構造体のデータ名(例えば S)はポインタです。

条件演算子
比較演算と条件判断を同時に行います。
比較演算の結果の 0 と 1 に応じて、あらかじめ指定された、それぞれの値に変換します。
演算子 意味    用例     用例の説明
? と : 条件演算  (X==Y)?A:B X=Y ならば A になり、X≠Y ならば、A になります。

printf ( "%s", (X==Y)?("同"):("異") );   /* X=Y なら同、X≠Y なら異と表示します。*/
			/* この場合の演算結果は、文字列(のポインタ)です。*/
Z = (X==Y) ? A : B ;		/* X=Y ならば Z=A 、X≠Y ならば、Z=A 。*/
これは、次の文と等価です。
if (X==Y) Z=A ; else { Z=B; }    /* X=Y ならば Z=A 、X≠Y ならば、Z=A 。*/

T


C言語 5 デ-タ入力 6 演算子 7 条件判断
 
  1mtoga@sannet.ne.jp   登録日 '96. 6.15
URL : http://www.page.sannet.ne.jp/mtoga/index.html