24.01.01 TIL - [C#] 기초 (4) : 연산자, 문자열

JJwoo·2023년 12월 31일
0

C#

목록 보기
4/20

🧮 연산자

  • 1) 산술연산자

    숫자를 대상으로 기본적인 수학 연산을 수행한다.

    예를 들어, 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 등이 있으며, 이들은 수학적 계산에 주로 사용된다.

    연산자설명
    +덧셈
    -뺄셈
    *곱셈
    /나눗셈
    %나머지

  • 2) 관계연산자

    두 값의 관계를 비교하여 참(true) 또는 거짓(false)을 반환한다.

    예를 들어, 같음(==), 다름(!=), 큼(>), 작음(<) 등이 있으며, 조건문과 루프에서 주로 사용된다.

    연산자설명
    ==같음
    !=다름
    >
    <작음
    >=크거나 같음
    <=작거나 같음

  • 3) 논리연산자

    논리 연산자는 조건식의 결과를 결합하거나 반전시킨다. 논리곱(&&), 논리합(||), 논리부정(!) 등이 있으며, 복잡한 조건을 평가할 때 사용

    참(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는 거짓

  • 4) 비트연산자

비트 연산자는 데이터를 비트 단위로 조작한다. 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)

🎲 복합 대입 연산자와 증감 연산자 활용

✔️ 변수를 더 편리하게 조작하고 값을 증감
  • 1) 복합 대입 연산자

변수에 연산을 수행한 결과를 저장하는 연산자.

연산자예시설명
+=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; 로 줄였다고 볼 수 있음.
  • 2) 증감 연산자

변수의 값을 1증가 시키거나 감소시킴

연산자설명
++1 증가
--1 감소

전위 연산, 후위 연산으로 나뉘는데
전위 연산(++x, --x)은 연산을 먼저 수행한 후 다른 연산을 진행하고, 후위 연산(x++, x--)은 다른 연산을 먼저 수행한 후 증감 연산을 진행한다.

ex)

++x // 전위 연산, 정상적으로 ++ 진행 
x++ // 후위 연산, 그 줄의 모든 코드가 다 끝나고(; 후에) x에 ++ 진행

! 연산자 우선순위를 사용하며 연산 !

C#에서 주로 사용되는 연산자들의 우선순위

  1. 괄호 ()

  2. 단항 연산자: (++, --, +, -, ! 등)

  3. 산술 연산자: (*, /, %, +, -)

  4. 시프트 연산자: (<<, >>)

  5. 관계 연산자: (<, >, <=, >=, ==, !=)

  6. 논리 연산자: (&&, ||)

  7. 할당 연산자: (=, +=, -=, *=, /= 등)


🎞 문자열 처리 기능 및 메서드

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을 생성

3) 분할
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보다 작음)가 나옴

💻 포멧팅

1. 문자열 형식화

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에 삽입합니다.

2. 문자열 보간

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}세 로군요.");

$ 붙이고 입력하는게 나는 좀 더 편한듯 하다.

profile
개발 모코코

0개의 댓글