演算子
演算子は、値を変数に格納したり、四則演算、変数や数値の比較などを行うときに使用する記号です。
演算子には、値を変数に代入する代入演算子、複合代入演算子、四則演算などの計算をする算術演算子、モジュロ演算子、条件比較をする関係演算子、論理演算子、ビット単位の計算をするビット演算子があります。
算術演算子・代入演算子・複合代入演算子
算術演算子は、足し算、引き算、掛け算、割り算といった四則演算を行う演算子です。
代入演算子は、値や演算結果を代入するための演算子で、複合代入演算子は、四則演算等の他の演算と代入演算を合わせた演算子になります。
下表に算術演算子、代入演算子、複合代入演算子をまとめます。
複合代入演算子について、「四則演算子」と「代入演算子」の組み合わせの他に、「ビット演算子」と「代入演算子」の組み合わせもあります。
演算子 | 演算 | 説明 |
+ | 和 | 足し算を行う演算子 |
– | 差 | 引き算を行う演算子 |
* | 積 | 掛け算を行う演算子 |
/ | 徐 | 割算を行う演算子 |
% | 余 | 整数に対して割り算の余りを返す演算子(モジュロ演算子) |
= | 代入 | 右辺を左辺に代入する演算子 |
+= | 和と代入の複合 | 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
関係演算子
関係演算子は、条件文の条件式に使います。
条件文については、こちらにまとめています。
演算が成立する場合、演算結果「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」を返します。
演算子 | 演算 | 説明 |
&& | AND | A && B 右辺B かつ 左辺A かどうかを評価する |
|| | OR | A || 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つの式の中での複雑な演算は極力、避けるようにプログラムを作った方が良いです。
演算子が複数個あるような条件式を使う場合には、優先順位を明確にするために括弧「()」で括るようにすると演算順序の誤りを防止できます。
コメント