C# 演算子

C#

演算子

演算子は、値を変数に格納したり、四則演算、変数や数値の比較などを行うときに使用する記号です。

演算子には、値を変数に代入する代入演算子、複合代入演算子、四則演算などの計算をする算術演算子、モジュロ演算子、条件比較をする関係演算子、論理演算子、ビット単位の計算をするビット演算子があります。

算術演算子・代入演算子・複合代入演算子

算術演算子は、足し算、引き算、掛け算、割り算といった四則演算を行う演算子です。

代入演算子は、値や演算結果を代入するための演算子で、複合代入演算子は、四則演算等の他の演算と代入演算を合わせた演算子になります。

下表に算術演算子、代入演算子、複合代入演算子をまとめます。

複合代入演算子について、「四則演算子」と「代入演算子」の組み合わせの他に、「ビット演算子」と「代入演算子」の組み合わせもあります。

演算子演算説明
+足し算を行う演算子
引き算を行う演算子
*掛け算を行う演算子
/割算を行う演算子
%整数に対して割り算の余りを返す演算子(モジュロ演算子)  
=代入右辺を左辺に代入する演算子
+=和と代入の複合A += B → A = A + B
-=差と代入の複合A -= B → A = A – B
*=積と代入の複合A *= B → A = A * B
/=徐と代入の複合A /= B → A = A / B
using System;

namespace OperatorTest
{
    class OperatorTest
    {
        static void Main(string[] args)
        {
            double a = 1.0;
            double b = 2.0;
            double add,sub,mul,div;
            double mod;

            //四則演算・代入演算
            add = a + b;    //和
            sub = a - b;    //差
            mul = a * b;    //積
            div = a / b;    //徐
            mod = a % b;    //余

            Console.WriteLine("和={0} 差={1} 積={2} 徐={3}",add,sub,mul,div);
            Console.WriteLine("余={0}",mod);

            //複合代入演算
            add += b;
            sub -= b;
            mul *= b;
            div /= b;

            Console.WriteLine("複合和={0} 複合差={1} 複合積={2} 複合徐={3}",add,sub,mul,div);
            Console.WriteLine("end\n");
        }
    }
}
c:\prog\cs>cs_operator
和=3 差=-1 積=2 徐=0.5
余=1
複合和=5 複合差=-3 複合積=4 複合徐=0.25
end

関係演算子

関係演算子は、条件文の条件式に使います。

条件文については、こちらにまとめています。

C# 制御文-条件文-
C#の条件文(if文、switch文)についてまとめます。

演算が成立する場合、演算結果「true」を返し、演算が成立しない場合は、演算結果「false」を返します。「true」と「false」は、bool型の値でそれぞれ、「真」、「偽」を表す値になります。

下表に関係演算子をまとめます。

演算子演算説明
大きいA > B 右辺Bが左辺Aより大きいかを評価する        
>=等しいか大きいA >= B 右辺Bが左辺A以上かを評価する
小さいA < B 右辺Bが左辺Aより小さいかを評価する
<=等しいか小さいA <= B 右辺Bが左辺A以下かを評価する
==等しいA == B 右辺Bが左辺Aと等しいかを評価する
!=等しくないA != B 右辺Bと左辺Aが異なるかを評価する
using System;

namespace Operator2Test
{
    class Operator2Test
    {
        static void Main(string[] args)
        {
            int a = 1;
            int b = 2;
            int c = 1;

            Console.WriteLine("(1<2)={0} (1>2)={1} (1>=1)={2}",(a<b),(a>b),(a>=c));
            Console.WriteLine("(1==1)={0} (1==2)={1} (1!=2)={2}",(a==c),(a==b),(a!=c));
            Console.WriteLine("end");
        }
    }
}
c:\prog\cs>cs_operator2
(1<2)=True (1>2)=False (1>=1)=True
(1==1)=True (1==2)=False (1!=2)=False
end

論理演算子

関係演算子と同じように論理演算子も条件文の条件式に使います。演算が成立する場合、演算結果「true」を返し、演算が成立しない場合、演算結果「false」を返します。

演算子演算説明
&&ANDA && B 右辺B かつ 左辺A かどうかを評価する
||ORA || B 右辺B または 左辺A かどうかを評価する           
NOT!(false)の場合、true、!(true)の場合、falseを返す(bool型のみ有効)
using System;

namespace Operator3Test
{
    class Operator3Test
    {
        static void Main(string[] args)
        {
            int a = 1;
            int b = 2;

            Console.WriteLine("(1<2)&&(1>2)={0}",((a<b)&&(a>b)));
            Console.WriteLine("(1<2)||(1>2)={0}",((a<b)||(a>b)));
            Console.WriteLine("end");
        }
    }
}
c:\prog\cs>cs_operator3
(1<2)&&(1>2)=False
(1<2)||(1>2)=True
end

ビット演算子

ビット演算子は、ビット単位の計算をするときに使います。ビットごとの論理演算やビットシフトを行います。

下表にビット演算子をまとめます。

演算子演算説明
ビットANDビットごとの論理積演算をしてその結果を返す         
ビットORビットごとの論理和演算をしてその結果を返す
EXORビットごとの排他的論理和演算をしてその結果を返す
NOT(反転)各ビットを論理反転してその結果を返す
<<左シフト指定ビット数分だけ値を左にシフトする
>>右シフト指定ビット数分だけ値を右にシフトする
using System;

namespace Operator4Test
{
    class Operator4Test
    {
        static void Main(string[] args)
        {
            byte a    = 0xFF;
            byte bit0 = 0x01;
            byte bit1 = 0x02;
            byte bit2 = 0x04;
            byte bit3 = 0x08;

            Console.WriteLine("0xFF&0x01={0:X}",(a&bit0));
            Console.WriteLine("0xFF|0x01={0:X}",(a|bit0));
            Console.WriteLine("0xFF^0x01={0:X}",(a^bit0));
            Console.WriteLine("~0xFF={0:X} ~0x01={1:X}",(byte)~a,(byte)~bit0);
            Console.WriteLine("bit2>>1={0:X} bit3>>1={1:X}",(bit2>>1),(bit3>>1));
            Console.WriteLine("bit2<<1={0:X} bit3<<1={1:X}",(bit2<<1),(bit3<<1));
            Console.WriteLine("end");
        }
    }
}
c:\prog\cs>cs_operator4
0xFF&0x01=1
0xFF|0x01=FF
0xFF^0x01=FE
~0xFF=0 ~0x01=FE
bit2>>1=2 bit3>>1=4
bit2<<1=8 bit3<<1=10
end

その他の演算子

四則演算子、代入演算子、複合代入演算子、関係演算子、論理演算子、ビット演算子以外の演算子についてまとめます。

演算子演算説明
++インクリメント数値を+1する
ーーデクリメント数値をー1する
? :三項演算条件式による評価をする                  
using System;

namespace Operator5Test
{
    class Operator5Test
    {
        static void Main(string[] args)
        {
            int a = 1;
            int b = 2;

            Console.WriteLine("a++={0} b--={1}",a++,b--);
            Console.WriteLine((a!=b)?"真":"偽");
            Console.WriteLine((a==b)?"真":"偽");
            Console.WriteLine("end");
        }
    }
}
c:\prog\cs>cs_operator5
a++=1 b--=2
真
偽
end

三項演算子は、

条件式 ? (条件式が真の結果)(条件式が偽の結果)

というような書式で記述します。

サンプルプログラムの

Console.WriteLine((a!=b)?"真":"偽");

の部分は、変数aに「1」、変数bに「2」が代入されているので、

「a!=b」という条件式の評価結果は、「true」となります。

その結果、「真」が出力されます。

逆の条件式のプログラム

Console.WriteLine((a==b)?"真":"偽");

の部分は、評価結果が「false」となるので、実行結果は、「偽」となります。

演算子の優先順位

演算子には、優先順位があり、優先順位の高い演算から順番に演算が行われます。

下図に演算子の優先順位をまとめます。図の上側が優先順位の高い演算子となります。

同じ行にある演算子は、同一の優先順位となります。

1つの式の中での複雑な演算は極力、避けるようにプログラムを作った方が良いです。

演算子が複数個あるような条件式を使う場合には、優先順位を明確にするために括弧「()」で括るようにすると演算順序の誤りを防止できます。

コメント

タイトルとURLをコピーしました