숫자를 대상으로 기본적인 수학 연산을 수행한다.
예를 들어, 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 등이 있으며, 이들은 수학적 계산에 주로 사용된다.
연산자 | 설명 |
---|---|
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 나눗셈 |
% | 나머지 |
두 값의 관계를 비교하여 참(true) 또는 거짓(false)을 반환한다.
예를 들어, 같음(==), 다름(!=), 큼(>), 작음(<) 등이 있으며, 조건문과 루프에서 주로 사용된다.
연산자 | 설명 |
---|---|
== | 같음 |
!= | 다름 |
> | 큼 |
< | 작음 |
>= | 크거나 같음 |
<= | 작거나 같음 |
논리 연산자는 조건식의 결과를 결합하거나 반전시킨다. 논리곱(&&), 논리합(||), 논리부정(!) 등이 있으며, 복잡한 조건을 평가할 때 사용
참(True) 또는 거짓(False) 값을 대상으로 사용됩니다.
연산자 | 설명 |
---|---|
&& | 논리곱(AND) |
II | 논리합(OR) |
! | 논리부정(NOT) |
bool isRainy = true;
bool isWeekend = false;
// 논리곱 (AND) 연산자: 모든 조건이 참일 때만 전체가 참
bool stayHome = isRainy && isWeekend; // isRainy와 isWeekend 둘 다 참이어야 stayHome이 참
// 논리합 (OR) 연산자: 조건 중 하나라도 참이면 전체가 참
bool goOut = isRainy || isWeekend; // isRainy 또는 isWeekend 중 하나라도 참이면 goOut은 참
// 논리부정 (NOT) 연산자: 참을 거짓으로, 거짓을 참으로 반전
bool isSunny = !isRainy; // isRainy가 참이면 isSunny는 거짓
비트 연산자는 데이터를 비트 단위로 조작한다. AND(&), OR(|), XOR(^), 비트 시프트(<<, >>) 등이 있으며, 저수준 프로그래밍이나 성능 최적화에서 사용된다.
2진수 리터럴 : 0b
16진수 리터럴 : 0x
예시
int a = 0b1100; // 12 (2진수)
int b = 0b1010; // 10 (2진수)
int and = a & b; // 0b1000 (8)
int or = a | b; // 0b1110 (14)
int xor = a ^ b; // 0b0110 (6)
int c = 0b1011; // 11 (2진수)
int leftShift = c << 2; // 0b101100 (44)
int rightShift = c >> 1; // 0b0101 (5)
int d = 0b1100; // 12 (2진수)
int bit3 = (d >> 2) & 0b1; // 1 (3번째 비트)
d |= 0b1000;
// 0b1100 | 0b1000 = 0b1100 (12)
변수에 연산을 수행한 결과를 저장하는 연산자.
연산자 | 예시 | 설명 |
---|---|---|
+= | x += y; | x = x + y; |
-= | x -= y; | x = x - y; |
*= | x *= y; | x = x * y; |
/= | x /= y; | x = x / y; |
%= | x %= y; | x = x % y; |
ex) x+=y;
// += 사용, x에 y를 더하여 넣는다 (x = x + y;)
x=x+y; 를 x+=y; 로 줄였다고 볼 수 있음.
변수의 값을 1증가 시키거나 감소시킴
연산자 | 설명 |
---|---|
++ | 1 증가 |
-- | 1 감소 |
전위 연산, 후위 연산으로 나뉘는데
전위 연산(++x, --x)은 연산을 먼저 수행한 후 다른 연산을 진행하고, 후위 연산(x++, x--)은 다른 연산을 먼저 수행한 후 증감 연산을 진행한다.
ex)
++x // 전위 연산, 정상적으로 ++ 진행
x++ // 후위 연산, 그 줄의 모든 코드가 다 끝나고(; 후에) x에 ++ 진행
! 연산자 우선순위를 사용하며 연산 !
C#에서 주로 사용되는 연산자들의 우선순위
괄호 ()
단항 연산자: (++, --, +, -, ! 등)
산술 연산자: (*, /, %, +, -)
시프트 연산자: (<<, >>)
관계 연산자: (<, >, <=, >=, ==, !=)
논리 연산자: (&&, ||)
할당 연산자: (=, +=, -=, *=, /= 등)
C#은 문자열을 처리하는 다양한 기능과 메서드가 있음
1) 문자열 생성
string str1 = "Hello, World!"; // 리터럴 문자열 사용
string str2 = new string('H', 5); // 문자 'H'를 5개로 구성된 문자열 생성
2) 연결
string str1 = "Hello";
string str2 = "World";
string str3 = str1 + " " + str2;
//str1 문자열과 str2 문자열을 공백으로 구분하여 연결한 새로운 문자열 str3을 생성
string str = "Hello, World!";
string[] words = str.Split(',');
// str 문자열을 쉼표(,)로 구분하여 분할한 문자열 배열 words를 생성.
4) 검색
string str = "Hello, World!";
int index = str.IndexOf("World");
//str 문자열에서 "World" 문자열의 첫 번째 인덱스를 찾아 index 변수에 저장
5) 대체
string str = "Hello, World!";
string newStr = str.Replace("World", "Universe");
//str 문자열에서 "World" 문자열을 "Universe" 문자열로 대체한 새로운 문자열 newStr을 생성
6-1) 문자열을 숫자로 변환
string str = "123";
int num = int.Parse(str);
//문자열 str을 정수형 숫자로 변환한 후, num 변수에 저장합니다.
6-2) 숫자를 문자열로 변환
int num = 123;
string str = num.ToString();
//정수형 숫자 num을 문자열로 변환한 후, str 변수에 저장합니다.
7) 비교
문자열 값 비교
string str1 = "Hello";
string str2 = "World";
bool isEqual = str1 == str2;
//str1 문자열과 str2 문자열을 비교한 후, isEqual 변수에 그 결과를 저장합니다.
= false
문자열 대소 비교
(사전의 뒤에 나오는 것이 더 우선순위가 높다)
string str1 = "Apple";
string str2 = "Banana";
int compare = string.Compare(str1, str2);
//str1 문자열과 str2 문자열을 대소 비교한 후, compare 변수에 그 결과를 저장합니다. compare 변수는 0보다 작으면 str1이 str2보다 작고, 0이면 str1과 str2가 같으며, 0보다 크면 str1이 str2보다 큽니다.
-> A가 B보다 작기 때문에 음수(0보다 작음)가 나옴
string.Format()
문자열 내에 특정 위치에 변수나 값을 삽입하는 전통적인 방법이다. 중괄호 {}
안에 인덱스를 사용하여 각 값의 위치를 지정하고, 이 인덱스에 해당하는 값들을 메서드의 인자로 전달한다.
string name = "John";
int age = 30;
string message = string.Format("My name is {0} and I'm {1} years old.", name, age);
//문자열 형식 문자열을 사용하여 name 변수와 age 변수의 값을 문자열 message에 삽입합니다.
C# 6.0부터 도입된 더 새롭고 간편한 방법으로, $
기호를 문자열 앞에 붙여 사용한다. 중괄호 {} 안에 직접 변수나 표현식을 넣어 값을 문자열에 삽입할 수 있다. 이 방법은 코드의 가독성을 향상시키며, 문자열 내에서 변수나 표현식의 값을 더 직관적
으로 표현할 수 있게 해준다.
string name = "John";
int age = 30;
string message = $"My name is {name} and I'm {age} years old.";
//문자열 보간 기능을 사용하여 name 변수와 age 변수의 값을 문자열 message에 삽입합니다.
두 방법 모두 문자열을 동적으로 생성하고 조작할 때 매우 유용하며, C# 프로그래밍에서 자주 사용된다.
본인은 문자열 보간이 더 편한 것 같다.
static void Main(string[] args)
{
string str1 = "hello, world!";
string str2 = new string('h', 5); // 문자열 생성
string str3 = str1 + " " + str2; // 연결
Console.WriteLine(str3);
//분할
string[] str4 = str1.Split(',');
Console.WriteLine(str4[0]);
Console.WriteLine(str4[1]);
//검색
int index = str1.IndexOf("world");
Console.WriteLine(index); //7번째
//대체
string newStr = str1.Replace("worlds", "mans");
Console.WriteLine(newStr); // 대체 됨
Console.WriteLine(str1); // 이것까지 바뀌진 않음
//변환
string str5 = "123";
int num = int.Parse(str5); // "123" 문자형 숫자 에서 정수 123으로 변환
Console.WriteLine(num);
num += 10;
Console.WriteLine(num.ToString()); // 숫자 123 + 10 = "133" 문자형 숫자
//비교
Console.WriteLine(str1 == str2); // 여기까진 false
Console.WriteLine(string.Compare(str1, str2));
// -1 , str1 < str2, 대문자의 알파벳보다 소문자가 값이 크다.
//포멧팅 (중요)
// 방법1. 문자열 형식화
string name = "Woo";
int age = 32;
string message = string.Format("My name is {0} and I'm {1} years old", name, age);
Console.WriteLine(message);
// 방법2. 문자열 보간
message = $"My name is {name} and I'm {age} years old.";
Console.WriteLine(message);
1) 사용자로부터 입력받기
이름, 나이 , 소개 문구
namespace muze
{
internal class Program
{
static void Main(string[] args)
{
Console.Write("이름을 입력하세요 : ");
string name = Console.ReadLine();
Console.Write("나이를 입력하세요 : ");
string years = Console.ReadLine();
// 방법 1
Console.WriteLine("안녕하세요, {0}! 당신은 {1}세 로군요.", name, years);
// 방법 2
Console.WriteLine($"안녕하세요, {name}! 당신은 {years}세 로군요.");
}
}
}
2) 간단 사칙연산 계산
더하기 나누기 곱하기 나누기
namespace muze
{
internal class Program
{
static void Main(string[] args)
{
Console.Write("첫 번째 수를 입력하세요 : ");
string input1 = Console.ReadLine();
Console.Write("두 번째 수를 입력하세요 : ");
string input2 = Console.ReadLine();
float num1 = float.Parse(input1);
float num2 = float.Parse(input2);
Console.WriteLine(num1 + num2); // 더하기
Console.WriteLine(num1 - num2); // 빼기
Console.WriteLine(num1 * num2); // 곱하기
Console.WriteLine(num1 / num2); // 나누기
}
}
}
p.s
int로 만들었다가
10 / 20, 나누기의 결과값 0.5가 0으로 표기되는 것을 보고 int -> float으로 코드 수정
3) 온도 변환기 만들기
사용자로부터 섭씨온도를 입력받아, 화씨온도로 변환하는 프로그램
공식은 화씨 = (섭씨 * 9/5) + 32
namespace muze
{
internal class Program
{
static void Main(string[] args)
{
Console.Write("섭씨 온도를 입력하세요 : ");
string input1 = Console.ReadLine();
int celsius = int.Parse(input1);
int fahrenheit = (celsius * 9 / 5) + 32;
Console.WriteLine("변환된 화씨 온도 : {0}", fahrenheit); // 방법1
Console.WriteLine($"변환된 화씨 온도 : {fahrenheit}"); // 방법2
}
}
}
4) BMI 계산기 만들기
키(m)와 체중(kg)를 입력받아, BMI 지수를 계산하는 프로그램.
공식은 BMI = 체중(kg) / 키(m)^2
namespace muze
{
internal class Program
{
static void Main(string[] args)
{
Console.Write("키(m)를 입력하세요 : ");
string input1 = Console.ReadLine();
Console.Write("체중(kg)을 입력하세요 : ");
string input2 = Console.ReadLine();
float height = float.Parse(input1);
float weight = float.Parse(input2);
float heightSquare = (float)Math.Pow(height, 2); // 제곱근 2
float BMI = weight / heightSquare;
Console.WriteLine($"BMI : {BMI}");
}
}
}
p.s
처음에는 웹에서 표현하듯이
height^2;
로 제곱을 표현하니 오류가 발생했다.
이유를 찾아보니까
C#에서 제곱을 표현하려면 Math.Pow 메서드나 곱셈 연산자 *를 사용해야 합니다.
라고 한다.
곰곰히 생각해보니
"^" 는 C#에서 비트 XOR 연산자로 사용해서 그런듯 하다.
공식만 보고 height 변수 간에 곱셈을 사용하여 제곱을 표현할까 고민했는데, 2 이상의 다른 모든 거듭 제곱을 표현하는 Math.Pow 메서드가 있기에 함수 기능 숙달을 위해 이 방식을 사용함.
역시 실전이 재미있다.
(자료형)Math.Pow(A, n)
A -> 숫자형 변수 or 숫자
n -> 거듭제곱
마지막으로 문자열 + 변수를 출력하는 방식 2가지를 배웠는데,
// 방법 1
Console.WriteLine("안녕하세요, {0}! 당신은 {1}세 로군요.", name, years);
// 방법 2
Console.WriteLine($"안녕하세요, {name}! 당신은 {years}세 로군요.");
$ 붙이고 입력하는게 나는 좀 더 편한듯 하다.