連載

C#入門

第8 式と演算子

(株)ピーデー
川俣 晶
2001/07/20


C#の演算子

 足し算などの基本的な演算子はプログラム言語が変わっても表記が変わらないことが多い。たとえば、足し算を示すために「+」記号を使うことは、FORTRANの昔から、C#の今まで、踏襲されてきた基本的な表現方法である。むしろ、コンピュータが出来る前の数学の表記からずっと踏襲されてきたと言ってもよいかもしれない。また、C#はC/C++の順当な発展形として進化してきたという事情から、ほとんどの演算子はC/C++と同様にふるまう。そこで今回のテーマは演算子なのだが、必ずしもすべての読者がすべての演算子の解説を必要とはしていないと考えた。まずは今回のサンプルプログラムの実行結果を見て欲しい。この結果を1行ずつ見て、自分が理解しているとおりの結果が出ているなら、その演算子についての説明を読む必要はないだろう。もし、なぜその結果になるのか分からない演算子があれば、解説を読んでいただきたい。

 では、今回のサンプルソースの実行結果を示す。これを見ていただきたい。

    1: ★★ 基本演算(みんな理解しよう)
    2: 2+3 =   5
    3: 2147483647+1    =   -2147483648
    4: 2147483647u+1u  =   2147483648
    5: 4294967295u+1u  =   0
    6: 3-2 =   1
    7: -2147483648-1   =   2147483647
    8: 0u-1u   =   4294967295
    9: 3*2 =   6
   10: 2147483647*2    =   -2
   11: 2147483647u*2u  =   4294967294
   12: 6/3 =   2
   13: 6/5 =   1
   14: 6.0/5.0 =   1.2
   15: 6%3 =   0
   16: 6%5 =   1
   17: 1<2 =   True
   18: 2<1 =   False
   19: 3<3 =   False
   20: 1>2 =   False
   21: 2>1 =   True
   22: 3>3 =   False
   23: 1<=2    =   True
   24: 2<=1    =   False
   25: 3<=3    =   True
   26: 1>=2    =   False
   27: 2>=1    =   True
   28: 3>=3    =   True
   29: 1==2    =   False
   30: 2==1    =   False
   31: 3==3    =   True
   32: 1!=2    =   True
   33: 2!=1    =   True
   34: 3!=3    =   False
   35: 1 is int    =   True
   36: 1.0 is int  =   False
   37: false&false =   False
   38: true&false  =   False
   39: true&true   =   True
   40: false^false =   False
   41: true^false  =   True
   42: true^true   =   False
   43: false|false =   False
   44: true|false  =   True
   45: true|true   =   True
   46: false ? 1 : 2   =   2
   47: true ? 1 : 2    =   1
   48: +(2+3)  =   5
   49: -(2+3)  =   -5
   50: !true   =   False
   51: !false  =   True
   52: ★★ ビット演算(ビット表現がわかる人のみ)
   53: 256>>1  =   128
   54: 256<<1  =   512
   55: 2147483647>>1   =   1073741823
   56: 2147483647<<1   =   -2
   57: 2147483647u>>1  =   1073741823
   58: 2147483647u<<1  =   4294967294
   59: -2147483648>>1  =   -1073741824
   60: -2147483648<<1  =   0
   61: 1&3 =   1
   62: 1^3 =   2
   63: 1|3 =   3
   64: ~1  =   -2
   65: ~1u =   4294967294
   66: ~-1 =   0
   67: ★★ 変数の値を変える演算子(ソースと見比べて理解しよう)
   68: set x=0
   69: ++x =   1
   70: ++x =   2
   71: ++x =   3
   72: set x=0
   73: x++ =   0
   74: x++ =   1
   75: x++ =   2
   76: set x=0
   77: --x =   -1
   78: --x =   -2
   79: --x =   -3
   80: set x=0
   81: x-- =   0
   82: x-- =   -1
   83: x-- =   -2
   84: set x=0
   85: x=1 =   1
   86: x is now 1
   87: x=1; x+=2; value of x is 3
   88: x=1; x-=2; value of x is -1
   89: x=2; x*=3; value of x is 6
   90: x=6; x/=2; value of x is 3
   91: x=6; x%=2; value of x is 0
   92: x=6; x<<=2; value of x is 24
   93: x=6; x>>=2; value of x is 1
   94: x=1; x&=3; value of x is 1
   95: x=1; x^=3; value of x is 2
   96: x=1; x|=3; value of x is 3
   97: ★★ 式を処理しない場合がある演算子(ソースと見比べて理解しよう)
   98: set x=0
   99: returnFalse(x++) && returnFalse(x++)    =   False
  100: x is now 1
  101: set x=0
  102: returnTrue(x++) && returnTrue(x++)  =   True
  103: x is now 2
  104: set x=0
  105: returnFalse(x++) || returnFalse(x++)    =   False
  106: x is now 2
  107: set x=0
  108: returnTrue(x++) || returnTrue(x++)  =   True
  109: x is now 1
サンプル・プログラムの実行結果

 さて、このプログラムは以下のソースコードより出力した。

  1: namespace ConsoleApplication12
  2: {
  3:   using System;
  4:
  5:   public class Class1
  6:   {
  7:     public static bool returnTrue( int value )
  8:     {
  9:       return true;
 10:     }
 11:     public static bool returnFalse( int value )
 12:     {
 13:       return false;
 14:     }
 15:     public static int Main(string[] args)
 16:     {
 17:       Console.WriteLine("★★ 基本演算(みんな理解しよう)");
 18:       Console.WriteLine("2+3\t=\t{0}",2+3);
 19:       int x1=2147483647, y1=1;
 20:       Console.WriteLine("2147483647+1\t=\t{0}",x1+y1);
 21:       Console.WriteLine("2147483647u+1u\t=\t{0}",2147483647u+1u);
 22:       uint x2=4294967295u, y2=1u;
 23:       Console.WriteLine("4294967295u+1u\t=\t{0}",x2+y2);
 24:
 25:       Console.WriteLine("3-2\t=\t{0}",3-2);
 26:       int x3=-2147483648, y3=1;
 27:       Console.WriteLine("-2147483648-1\t=\t{0}",x3-y3);
 28:       uint x4=0u, y4=1u;
 29:       Console.WriteLine("0u-1u\t=\t{0}",x4-y4);
 30:
 31:       Console.WriteLine("3*2\t=\t{0}",3*2);
 32:       int x5=2147483647, y5=2;
 33:       Console.WriteLine("2147483647*2\t=\t{0}",x5*y5);
 34:       Console.WriteLine("2147483647u*2u\t=\t{0}",2147483647u*2u);
 35:
 36:       Console.WriteLine("6/3\t=\t{0}",6/3);
 37:       Console.WriteLine("6/5\t=\t{0}",6/5);
 38:       Console.WriteLine("6.0/5.0\t=\t{0}",6.0/5.0);
 39:
 40:       Console.WriteLine("6%3\t=\t{0}",6%3);
 41:       Console.WriteLine("6%5\t=\t{0}",6%5);
 42:
 43:       Console.WriteLine("1<2\t=\t{0}",1<2);
 44:       Console.WriteLine("2<1\t=\t{0}",2<1);
 45:       Console.WriteLine("3<3\t=\t{0}",3<3);
 46:       Console.WriteLine("1>2\t=\t{0}",1>2);
 47:       Console.WriteLine("2>1\t=\t{0}",2>1);
 48:       Console.WriteLine("3>3\t=\t{0}",3>3);
 49:
 50:       Console.WriteLine("1<=2\t=\t{0}",1<=2);
 51:       Console.WriteLine("2<=1\t=\t{0}",2<=1);
 52:       Console.WriteLine("3<=3\t=\t{0}",3<=3);
 53:       Console.WriteLine("1>=2\t=\t{0}",1>=2);
 54:       Console.WriteLine("2>=1\t=\t{0}",2>=1);
 55:       Console.WriteLine("3>=3\t=\t{0}",3>=3);
 56:
 57:       Console.WriteLine("1==2\t=\t{0}",1==2);
 58:       Console.WriteLine("2==1\t=\t{0}",2==1);
 59:       Console.WriteLine("3==3\t=\t{0}",3==3);
 60:
 61:       Console.WriteLine("1!=2\t=\t{0}",1!=2);
 62:       Console.WriteLine("2!=1\t=\t{0}",2!=1);
 63:       Console.WriteLine("3!=3\t=\t{0}",3!=3);
 64:
 65:       Console.WriteLine("1 is int\t=\t{0}",1 is int);
 66:       Console.WriteLine("1.0 is int\t=\t{0}",1.0 is int);
 67:
 68:       Console.WriteLine("false&false\t=\t{0}",false&false);
 69:       Console.WriteLine("true&false\t=\t{0}",true&false);
 70:       Console.WriteLine("true&true\t=\t{0}",true&true);
 71:
 72:       Console.WriteLine("false^false\t=\t{0}",false^false);
 73:       Console.WriteLine("true^false\t=\t{0}",true^false);
 74:       Console.WriteLine("true^true\t=\t{0}",true^true);
 75:
 76:       Console.WriteLine("false|false\t=\t{0}",false|false);
 77:       Console.WriteLine("true|false\t=\t{0}",true|false);
 78:       Console.WriteLine("true|true\t=\t{0}",true|true);
 79:
 80:       Console.WriteLine("false ? 1 : 2\t=\t{0}",false ? 1 : 2);
 81:       Console.WriteLine("true ? 1 : 2\t=\t{0}",true ? 1 : 2);
 82:
 83:       Console.WriteLine("+(2+3)\t=\t{0}",+(2+3));
 84:       Console.WriteLine("-(2+3)\t=\t{0}",-(2+3));
 85:
 86:       Console.WriteLine("!true\t=\t{0}",!true);
 87:       Console.WriteLine("!false\t=\t{0}",!false);
 88:
 89:       Console.WriteLine("★★ ビット演算(ビット表現がわかる人のみ)");
 90:       Console.WriteLine("256>>1\t=\t{0}",256>>1);
 91:       Console.WriteLine("256<<1\t=\t{0}",256<<1);
 92:
 93:       Console.WriteLine("2147483647>>1\t=\t{0}",2147483647>>1);
 94:       Console.WriteLine("2147483647<<1\t=\t{0}",2147483647<<1);
 95:
 96:       Console.WriteLine("2147483647u>>1\t=\t{0}",2147483647u>>1);
 97:       Console.WriteLine("2147483647u<<1\t=\t{0}",2147483647u<<1);
 98:
 99:       Console.WriteLine("-2147483648>>1\t=\t{0}",-2147483648>>1);
100:       Console.WriteLine("-2147483648<<1\t=\t{0}",-2147483648<<1);
101:
102:       Console.WriteLine("1&3\t=\t{0}",1&3);
103:       Console.WriteLine("1^3\t=\t{0}",1^3);
104:       Console.WriteLine("1|3\t=\t{0}",1|3);
105:
106:       Console.WriteLine("~1\t=\t{0}",~1);
107:       Console.WriteLine("~1u\t=\t{0}",~1u);
108:       Console.WriteLine("~-1\t=\t{0}",~-1);
109:
110:       Console.WriteLine("★★ 変数の値を変える演算子(ソースと見比べて理解しよう)");
111:       int x=0; Console.WriteLine("set x=0");
112:       Console.WriteLine("++x\t=\t{0}",++x);
113:       Console.WriteLine("++x\t=\t{0}",++x);
114:       Console.WriteLine("++x\t=\t{0}",++x);
115:
116:       x=0; Console.WriteLine("set x=0");
117:       Console.WriteLine("x++\t=\t{0}",x++);
118:       Console.WriteLine("x++\t=\t{0}",x++);
119:       Console.WriteLine("x++\t=\t{0}",x++);
120:
121:       x=0; Console.WriteLine("set x=0");
122:       Console.WriteLine("--x\t=\t{0}",--x);
123:       Console.WriteLine("--x\t=\t{0}",--x);
124:       Console.WriteLine("--x\t=\t{0}",--x);
125:
126:       x=0; Console.WriteLine("set x=0");
127:       Console.WriteLine("x--\t=\t{0}",x--);
128:       Console.WriteLine("x--\t=\t{0}",x--);
129:       Console.WriteLine("x--\t=\t{0}",x--);
130:
131:       x=0; Console.WriteLine("set x=0");
132:       Console.WriteLine("x=1\t=\t{0}", x=1 );
133:       Console.WriteLine("x is now {0}",x);
134:
135:       x = 1;
136:       x += 2;
137:       Console.WriteLine("x=1; x+=2; value of x is {0}", x );
138:       x = 1;
139:       x -= 2;
140:       Console.WriteLine("x=1; x-=2; value of x is {0}", x );
141:       x = 2;
142:       x *= 3;
143:       Console.WriteLine("x=2; x*=3; value of x is {0}", x );
144:       x = 6;
145:       x /= 2;
146:       Console.WriteLine("x=6; x/=2; value of x is {0}", x );
147:       x = 6;
148:       x %= 2;
149:       Console.WriteLine("x=6; x%=2; value of x is {0}", x );
150:       x = 6;
151:       x <<= 2;
152:       Console.WriteLine("x=6; x<<=2; value of x is {0}", x );
153:       x = 6;
154:       x >>= 2;
155:       Console.WriteLine("x=6; x>>=2; value of x is {0}", x );
156:       x = 1;
157:       x &= 3;
158:       Console.WriteLine("x=1; x&=3; value of x is {0}", x );
159:       x = 1;
160:       x ^= 3;
161:       Console.WriteLine("x=1; x^=3; value of x is {0}", x );
162:       x = 1;
163:       x |= 3;
164:       Console.WriteLine("x=1; x|=3; value of x is {0}", x );
165:
166:       Console.WriteLine("★★ 式を処理しない場合がある演算子(ソースと見比べて理解しよう)");
167:       x=0; Console.WriteLine("set x=0");
168:       Console.WriteLine("returnFalse(x++) && returnFalse(x++)\t=\t{0}",returnFalse(x++) && returnFalse(x++));
169:       Console.WriteLine("x is now {0}",x);
170:       x=0; Console.WriteLine("set x=0");
171:       Console.WriteLine("returnTrue(x++) && returnTrue(x++)\t=\t{0}",returnTrue(x++) && returnTrue(x++));
172:       Console.WriteLine("x is now {0}",x);
173:       x=0; Console.WriteLine("set x=0");
174:       Console.WriteLine("returnFalse(x++) || returnFalse(x++)\t=\t{0}",returnFalse(x++) || returnFalse(x++));
175:       Console.WriteLine("x is now {0}",x);
176:       x=0; Console.WriteLine("set x=0");
177:       Console.WriteLine("returnTrue(x++) || returnTrue(x++)\t=\t{0}",returnTrue(x++) || returnTrue(x++));
178:       Console.WriteLine("x is now {0}",x);
179:
180:       return 0;
181:     }
182:   }
183: };
サンプル・プログラムのソースコード
 
 

 INDEX
  C#入門 第8回 式と演算子
  1.C#の演算子
    2.四則演算(+、-、*、/)
        コラム:Visual Studio.NET ベータ2使用時の注意
 
「C#入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH