연산자(Operators)
목차
📌 C# 에서는 산술 연산자, 증감 연산자, 조건 연산자, 관계 연산자, 논리 연산자 등 여러 가지의 연산자를 제공한다.
분류 | 연산자 | 예 |
수식 연산자 | +, -, *, /, % | a = b + c |
증감 연산자 | ++, -- | a++; |
할당 연산자 | =, +=, -=, *=, /=, %= | a += b + c; |
논리 연산자 | &&, ||, ! | a && b |
관계 연산자 | <, >, ==, !=, >=, <= | a > b |
비트 연산자 | &, |, ^ | a ^ b |
시프트 연산자 | >>, << | a >> 2 |
📌 수식 연산자에는 덧셈, 뺄셈, 곱셈 나눈셈 그리고 나눗셈을 한 뒤의 나머지를 구하는 연산자들이 있다.
분류 | 기능 | 예 |
+ | 양쪽 피연산자를 서로 더함 | a + b |
- | 왼쪽 피연산자에서 오른쪽 피연자를 뺌 | a - b |
* | 양쪽 피연산자를 서로 곱함 | a * b |
/ | 왼쪽 피연산자를 오른쪽 피연산자로 나눔 | a / b |
% | 왼쪽 피연산자를 오른쪽 피연자로 나눈 뒤의 나머지를 구함 | a % b |
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int a = 55, b = 4;
Console.WriteLine("{0} + {1} = {2}", a, b, a + b);
Console.WriteLine("{0} - {1} = {2}", a, b, a - b);
Console.WriteLine("{0} * {1} = {2}", a, b, a * b);
Console.WriteLine("{0} / {1} = {2}", a, b, a / b);
Console.WriteLine("{0} % {1} = {2}", a, b, a % b);
}
}
}
결과)
55 + 4 = 59
55 - 4 = 51
55 * 4 = 220
55 / 4 = 13
55 % 4 = 3
계속하려면 아무 키나 누르십시오 . . .
55를 4로 나눴을 때 13.75 가 아니라 13만 출력되는 것은 정수간 나눗셈은 항상 정수로만 나타나기 때문이다. 아래예와 같이 제수나 피제수중 하나를 실수 타입(float, double, decimal)로 변환해 주어야 원하는 값을 얻을 수 있다.
...
Console.WriteLine("{0} / {1} = {2}", a, b, a / (double)b);
Console.WriteLine("{0} / {1} = {2}", a, b, (a + 0.0) / b);
Console.WriteLine("{0} / {1} = {2}", a, b, 1.0 * a / b);
...
📌 증감 연산자는 피연산자의 값을 1만큼 증가시키는 증가 연산자와, 1만큼 감소시키는 감소 연산자가 있다.
분류 | 기능 | 예 |
++ (전위 증가 연산자) | 피연산자의 값을 1만큼 증가 | ++a; |
-- (전위 감소 연산자) | 피연산자의 값을 1만큼 감소 | --a; |
++ (후위 증가 연산자) | 피연산자의 값을 1만큼 증가 | a++; |
-- (후위 감소 연산자) | 피연산자의 값을 1만큼 감소 | a--; |
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int a = 1;
Console.WriteLine(++a);
Console.WriteLine(a++);
Console.WriteLine(--a);
Console.WriteLine(a++);
}
}
}
결과)
2
2
2
2
계속하려면 아무 키나 누르십시오 . . .
전위는 우선 피연산자의 값을 증가시키거나 감소하고 그 문장을 실행하며, 후위는 문장을 먼저 실행하고 그 뒤로 값을 증가시키거나 감소하는 차이점이 있다.
📌 관계 연산자는 두 피연산자의 관계를 알아보는 연산자인데, 크기를 비교하는 연산자, 두 피연산자의 값이 서로 같거나 다른지 확인하는 연산자가 있다.
분류 | 기능 | 예 |
< | 오른쪽 피연산자가 왼쪽 피연산자보다 크면 참, 작으면 거짓 | a < b |
> | 왼쪽 피연산자가 오른쪽 피연산자보다 크면 참, 자으면 거짓 | a > b |
== | 왼쪽 피연산자가 오른쪽 피연산자와 같으면 참, 다르면 거짓 | a == b |
!= | 왼쪽 피연산자가 오른쪽 피연산자와 다르면 참, 같으면 거짓 | a != b |
>= | 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 참, 작으면 거짓 | a >= b |
<= | 오른쪽 피연산자가 왼쪽 피연산자보다 크거나 같으면 참, 작으면 거짓 | a <= b |
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int a = 50, b = 60;
Console.WriteLine(a < b); // 50 < 60, True
Console.WriteLine(a > b); // 50 > 60, False
Console.WriteLine(a == b); // 50 == 60, False
Console.WriteLine(a != b); // 50 !- 60, True
Console.WriteLine(a >= b); // 50 >= 60, False
Console.WriteLine(a <= b); // 50 <= 60, True
}
}
}
결과)
True
False
False
True
False
True
계속하려면 아무 키나 누르십시오 . . .
💡 Tip : 관계 연산자의 결과는 반드시 참(True) 혹은 거짓(False) 이다.
📌 할당 연산자는 오른쪽 피연산자를 왼쪽 피연산자에 할당하는 기능을 한다.
분류 | 기능 | 예 |
= | 오른쪽 피연산자를 왼쪽 피연산자에 할당 | a = b; |
+= | a += b는 a = a + b와 같음 | a += b; |
-= | a -= b는 a = a - b와 같음 | a -= b; |
*= | a *= b는 a = a * b와 같음 | a *= b; |
/= | a /= b는 a = a / b와 같음 | a /= b; |
%= | a %= b는 a = a % b와 같음 | a %= b; |
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int a = 50, b = 60;
a += b;
Console.WriteLine(a);
a -= b;
Console.WriteLine(a);
a *= b;
Console.WriteLine(a);
a /= b;
Console.WriteLine(a);
a %= b;
Console.WriteLine(a);
}
}
}
결과)
110
50
3000
50
50
계속하려면 아무 키나 누르십시오 . . .
📌 논리 연산자는 관계 연산자 처럼 값이 True 도는 False가 되는 연산자 이다.
A | B | A && B |
참(True) | 참(True) | 참(True) |
참(True) | 거짓(False) | 거짓(False) |
거짓(False) | 참(True) | 거짓(False) |
거짓(False) | 거짓(False) | 거짓(False) |
<논리곱 연산자(&&) 진리표>
A | B | A || B |
참(True) | 참(True) | 참(True) |
참(True) | 거짓(False) | 참(True) |
거짓(False) | 참(True) | 참(True) |
거짓(False) | 거짓(False) | 거짓(False) |
<논리합 연산자(||) 진리표>
A | !A |
참(True) | 거짓(False) |
거짓(False) | 참(True) |
<부정 연산자(!) 진리표>
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int a = 50, b = 60;
Console.WriteLine(a > 40 && b > 50);
Console.WriteLine(a > 40 || b > 70);
Console.WriteLine(!(a < b));
}
}
}
결과)
True
True
False
계속하려면 아무 키나 누르십시오 . . .
📌 비트 연산자는 말 그대로 비트를 다루는 데 사용되는 연산자이다.
분류 | 기능 | 예 |
& | 두 피연산자의 대응되는 비트에 논리곱(AND)을 수행 | a & b |
| | 두 피연산자의 대응되는 비트에 논리합(OR)을 수행 | a | b |
^ | 두 피연산자의 대응되는 비트에 배타적 논리합(XOR)을 수행 | a ^ b |
& 연산자는 양쪽 비트가 모두 1이어야만 결과가 1이 되고, 그렇지 않으면 결과가 0이 된다. | 연산자는 양쪽 비트 중 하나라도 1 이면 결과가 1이 된다. ^ 연산자는 양쪽 비트가 서로 달라야 결과가 1이 된다.
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int a = 5, b = 10;
Console.WriteLine(a & b);
Console.WriteLine(a | b);
Console.WriteLine(a ^ b);
}
}
}
결과)
0
15
15
계속하려면 아무 키나 누르십시오 . . .
위의 결과가 어떻게 해서 나왔는지 아래를 참고. 10진수 5를 2진수로 나타내면 101(2), 10진수 10을 2진수로 나타내면 1010(2)와 같다.
📌 시프트 연산자도 비트 연산과 관련된 연산자이다. 이 연산자를 통해 첫 번째 피연산자를 두 번째 피연산자로 지정된 비트 수만큼 왼쪽(<<)으로 이동시키거나 오른쪽(>>)으로 이동시킬 수 있다.
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int a = 616;
Console.WriteLine(a << 4);
Console.WriteLine(a >> 4);
}
}
}
결과)
9856
38
계속하려면 아무 키나 누르십시오 . . .
우선 616을 2진수로 나타내면 1001101000(2) 이다. 이 비트열을 왼쪽으로 4만큼 이동시키면 아래와 같이 10011010000000(2)가 될것이다. 이는 10진수로 나타내면 9856이다. 비트열을 왼쪽으로 이동시키면서 새로 나타난 하위 비트는 0으로 채워진다.
다시 기존 비트열을 오른쪽으로 4만큼 이동시키면 아래와 같이 100110(2)이 될 것이다. 이는 10진수로 나타내면 38이다. 비트열을 오른쪽으로 이동시키면서 새로 나타난 상위 비트는 부호 비트로 채워진다.
💡 Tip : 부호 비트는 양수의 경우는 0, 음수의 경우는 1
[C#] 클래스(Class), 접근 제한자(Access Modifier), this (0) | 2019.09.06 |
---|---|
[C#] 배열(Array) (0) | 2019.09.06 |
[C#] foreach, Method (1) | 2019.09.06 |
[C#] Hello World, 기본 자료형 (0) | 2019.09.05 |
.NET Framework, .NET Core, Xamarin 차이점 (0) | 2019.09.05 |