본문 바로가기
Development/멋쟁이사자처럼 게임개발 부트캠프

[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 3일차 (1) - 이진수 & 연산자

by jjeondeuk1008 2025. 2. 27.

[ 목차 ]

     

     

     


    오늘은 이진수와 다양한 연산자에 대해 알아보도록 한다.

     

    이진수를 사용하여 변환하는 것과 기본값,

    진짜 무수히 많은 연산자에 대해 알아보고 실습하는 시간을 가진다.

     

    개자이너가 되기 위해 가보자고~!


     

    1. 이진수 다루기

     

     

    이진수란? 0과 1로 수를 표현하는 것이다.

    이진법!으로 표현하는 것이다.

     

     

    계산기에서도 쉽게 찾아볼 수 있는데

    프로그래머의 계산기에는 BIN 보면 알 수 있다.

     

     

     

     

    이진수처리는 Convert 를 사용해

     

    문자열에서 이진수 → 정수 혹은 정수 → 이진수 문자열

     

    이렇게 변환 가능하다.

     

     

     

    (1) 이진수를 정수로 변환

     

    문자열을 입력 받는다.

    이후에 'Convert.ToInt32' 메서드로 인해 데이터를 다른 형식으로 변환하는 것이다.

    마지막 '2'의 의미는 변환할 숫자의 진법을 나타낸다.

    여기의 경우엔 2진법을 10진수로 변환하겠다는 뜻이다.

    Console.Write("2진수를 입력하세요: ");
    string binaryInput = Console.ReadLine(); //문자열을 입력 받는다
    int decimalValue = Convert.ToInt32(binaryInput, 2); //2진수 -> 10진수 변환
    

     

     

    (2) 정수를 이진수로 변환

     

    여기의 ToString() 메서드는 주어진 값을 문자열 형식으로 변환한다.

    2는 변환할 숫자의 진법을 나타내 10진수에서 2진수 문자열로 변환을 수행한다.

    string binaryOutput = Convert.ToString(decimalValue, 2); //10진수 -> 2진수 변환
    
    Console.WriteLine($"입력한 이진수: {binaryInput}");
    Console.WriteLine($"10진수로 변환: {decimalValue}");
    Console.WriteLine($"다시 이진수로 변환: {binaryOutput}");
    

     

     

     

     


    2. var 사용하여 변수 선언

     

    var는 int, string, float 등

    다양한 변수를 사용하지 않고 자동으로 추론하게 해준다.

    선언 시에 반드시 초기화 해야한다.

    //var를 사용하여 변수 선언
    var name = "Alice"; //문자열로 추론
    var age = 25; //정수로 추론
    var isStudent = true; //논리값으로 추론
    
    Console.WriteLine($"이름: {name}, 나이: {age}, 학생 여부: {isStudent}");
    

     

     

     


    3. 변수의 기본값을 default 키워드 사용

     

    ex) 숫자 : 0 , 문자열 : null , 논리값 : flase

    → 변수를 초기화하지 않을 경우 발생하는 오류를 방지하는데 유용

    → 코드의 가독성을 높이면서 일관된 초기화 방법을 제공

    //default 키워드 사용한 기본값 설정
    int defaultInt = default; //기본값: 0
    string defaultString = default; //기본값: null'
    
    bool defaultBool = default; //기본값: false
    
    Console.WriteLine($"정수 기본값: {defaultInt}");
    Console.WriteLine($"문자열 기본값: {defaultString}");
    Console.WriteLine($"논리값 기본값: {defaultBool}");
    

     

     

     

     


     

    4. 연산자

    연산자란? 값을 계산하거나 조작할 때 사용한다.

     

     

     

     

    (1) 산술 연산자

     

    + - * / %

    덧셈 뺄셈 곱셈 나눗셈 나머지 연산을 수행한다.

    여기에서 헷갈리기 쉬운 것은 /(나누기) %(나머지)이다.

    나누기는 몫의 값이 나오고, 나머지는 말 그대로 나머지 값이 출력된다.

    연산자 활용
    int a = 5, b = 3;
    int sum = 0;
    
    sum = a + b; //산술 연산자 사용
    Console.WriteLine($"합: {sum}"); //출력 8 
    
    sum = a - b; //산술 연산자 사용
    Console.WriteLine($"빼기: {sum}"); //출력 2
    
    sum = a * b; //산술 연산자 사용
    Console.WriteLine($"곱하기: {sum}"); //출력 15
    
    sum = a / b; //산술 연산자 사용 -> 정수이기 때문에 소수점 불가능, 몫만 나옴
    Console.WriteLine($"나누기: {sum}"); //출력 1
    
    sum = a % b; //산술 연산자 사용 -> 나머지 값
    Console.WriteLine($"나머지: {sum}"); //출력 2
    

     

     

     

    이 나머지를 이용해

    짝수 / 홀수 판별하는 응용 코드를 실습하였다.

    //짝수 홀수 판별
    int number = 7;
    int sum = 0;
    sum = number % 2; // 0 나오면 짝수, 1 나오면 홀수 --> 랜덤 몇개 뽑기 등 유용한 게 많음 
    Console.WriteLine("짝수 홀수 판별: " + sum);
    

     

     

     

     

     

     

     

    (2) 단항 연산자: 피연산자(연산자의 대상) 하나에 적용 + - ! ~ 포함

     

    ! = 논리부정 : True는 False 로 변경, False는 True 값으로 반환을 한다.

    한 마디로 반대 개념을 가진다.

     

    ++, — (증감연산자) : 값을 증감하는 연산자이다.

    단항 연산자
    int number = 5;
    bool flag = true;
    
    Console.WriteLine(+number); //양수 출력: 5
    Console.WriteLine(-number); //음수 출력: -5
    Console.WriteLine(!flag); //논리 부정: false
    

     

     

    ~ = 비트부정 : 해당 데이터의 각 비트를 변환

    //~비트 반전
    //10 1010->이진수
    //   0101-> 0이 1로, 1이 0으로, 4bit
    
    int num = 10;
    int result = ~num; //모든 비트 반전 1111 0101 결과 : -11
    
    Console.WriteLine("원래 값: " + num);
    Console.WriteLine("~ 연산자 적용 후: " + result);
    

     

    변환에 도움 되는 사진이다.

    처음에 이해하기 힘들었는데, 비트 반전이 되면

     

    ex) '0' 4비트 기준

    양수: 0000

    음수: 1000

     

    이렇게 보면 앞자리가 1로 바뀌었다.

    아래 사진을 보면 모든 음수가 1이 붙는 다는 것외에는 동일하니 참고하길!

    계산기 돌려보는 것도 좋을듯..!

     

     

     

     

     

     

    (3) 변환 연산자

     

    () 를 사용해 데이터 형식을 명시적으로 변환한다.

    여기에서 포인트는 실수에서 정수로 변환 시에 소수점이 버려진다.

    //캐스팅
    double pi = 3.14;
    int integerPi = (int)pi; //실수형 -> 정수형 변환
    
    Console.WriteLine(integerPi); //3
    

     

     

     

     

    이것을 응용해서 과목 3개를 더한 값과 평균값을 구해보는 실습을 진행하였다.

     

    먼저 더하는 것을 하기 위해 변수 선언 후 초기화한 뒤에 더해준다.

    그 뒤에 실수형으로 변환하면서 나누어주어 평균값을 구하는 것으로 마무리!

    //평균값 구하기
    int iKor = 90;
    int iEng = 75;
    int iMath = 58;
    
    int sum = 0;
    float average = 0.0f;
    
    sum = iKor + iEng + iMath;
    average = (float)sum / 3; //평균 -> 정수를 실수로 변환하던가
    average = sum / 3.0f; //평균 -> 실수 하나로 나눈다던가..
    
    Console.WriteLine("총점: " + sum);
    Console.WriteLine("평균: " + average);
    

     

     

     

     

     

    (4) 문자열 연결 연산자

     

    문자를 한꺼번에 출력하고 싶을 때 어떻게 하는 건가?에 대한 연결 연산자이다.

    출력 코드를 입력할 때 '+'를 포함시켜서 하면 같이 출력된다.

    둘 사이에 공백을 추가 하고 싶으면 큰 따옴표 사이에 스페이스바로 공백을 포함시켜주면 된다.

    //문자열 연결 연산자
    string firstName = "Alice";
    string lastName = "Smith";
    
    Console.WriteLine(firstName + " " + lastName); //출력: Alice Smith
    

     

     

     

     

    (5) 할당 연산자

     

    값을 변수에 저장 ⇒ [ = += -= *= /= %= ]

    할당연산자는 기존의 +와는 다르다.

    a += 5를 해석하면

    a = a + 5 이다.

     

    아래의 코드처럼 a = 10일때

    a += 5는 a가 15가 된다,

    그리고 바로 아래 코드가

    a-= 5

    a가 10이니까 이것은 5가 아니냐고 생각할 수 있지만

    그게 아니고 연결해서 계산해준다.

    a += 5 에서 구한 15의 값을 a에 대입해주면

    a = 15 - 5가 되어서

    a -= 5의 값은 10이다.

     

    이렇게 누적으로 풀어낸다.

    //할당 연산자
    int a = 10;
    a += 5; // a = a + 5;
    Console.WriteLine(a);
    a -= 5; // a = a - 5;
    Console.WriteLine(a);
    a *= 5; // a = a * 5;
    Console.WriteLine(a);
    a /= 5; // a = a / 5;
    Console.WriteLine(a);
    a %= 5; // a = a % 5;
    Console.WriteLine(a);
    // -> 연결이 되면 누적이 된다
    // 10 + 5 = 15
    // 15 - 5 = 10
    // 10 * 5 = 50
    // 50 / 5 = 10
    // 10 % 5 = 0
    

     

     

     

     

    (6) 증감 연산자

     

    ++ / —

    증감 연산자의 포인트는 전위, 후위이다.

    전위는 현재 코드에서 더해주는 것이고, 후위는 다음 라인부터 더한 값을 준다는 것이다.

    증감 연산자
    int b = 3;
    
    전위++b
    ++b;
    Console.WriteLine("b의 값은: " + b);
    ++b;
    Console.WriteLine("b의 값은: " + b);
    
    //후위 b++
    b++;
    Console.WriteLine("b의 값은: " + b);
    

     

    전위 후위에 대해서는 아래 주석에도 설명이 있으니 참고!

    Console.WriteLine("b의 값은: " + (++b)); //전위는 지금 코드에서 더해줌 +1
    Console.WriteLine("b의 값은: " + (b++)); //후위는 지금 코드에서 안 더하고 다음 29번 코드부터 더해줌
    Console.WriteLine("b의 값은: " + (b));   //그래서 이번 코드에 +1 된 값으로 나옴
    
    --b;
    Console.WriteLine("b의 값은: " + b);

     

     

     

     

     

    (7) 관계형 연산자

     

    추후에 조건문, 반복문 등 많이 쓰이는 관계형 연산자이다.

    관계형에 대한 답은 true or false로 결정된다.

    • > : 비교
    • == : 같은가?
    • != : 같지 않은가?
    • >= : 크거나 같은가?
    // == 같다 != 같지않다 a<b, c> d, <= , =>
    int x = 5, y = 10;
    
    Console.WriteLine(x < y); // 비교이기 때문에 true or false
    Console.WriteLine(x == y); // 같은가?의 질문으로 같지 않아서 false
    Console.WriteLine(x != y); // 같지 않은가?의 질문으로 true
    Console.WriteLine(x > y); // 비교인데 틀렸음 false
    Console.WriteLine(x >= y); // x가 크거나 작냐?의 질문으로 false
    Console.WriteLine(x <= y); // y가 크거나 작냐?의 질문으로 true
    

     

     

     

     

     

     

    (8) 논리 연산자

     

    논리값을 결합하거나 반전한다 ( && || ! )

    • && : AND ( a 와 b가 둘 다 참이어야 참으로 된다, 하나라도 거짓이면 거짓으로 나온다.)
    • || : OR ( 둘 중 하나만 참이면 참이다, 둘 다 거짓이면 거짓)
    • ! : 위에 나온 논리부정이다.

    개인적으로 많이 접하지 못한 기호라서 생소하기 때문에 외우는 게 어려웠다...

    익숙해지면 괜찮겠지. . .

    bool a = true, b = false;
    Console.WriteLine(a && b); //AND : a랑 b가 true로 참이어야 됨, 아니면 false, true를 1로 표현
    Console.WriteLine(a || b); //OR : 둘 중 하나만 true여도 true, 둘 다 false면 false
    Console.WriteLine(!a); // NOT : false
    
    bool a = false;
    bool b = false;
    
    b = !a;
    Console.WriteLine(b); //ture
    // a가 b를 덮어씌워버림 그래서 b가 false든 true든 a의 값으로 나옴
    

     

     

     

     

     

    (9) 비트 연산자

     

    비트 단위로 4비트 기준

    • AND(&) : 겹치는 것만 출력 (0과0 , 1과1)
    • OR(|) : 1과 0이 겹치면 1, 1과 1이 겹치면 1, 0은 0
    • XOR(^) : 같은 것을 더하면 0 (1+1 = 0, 0+0 = 0, 1 + 0 = 1)
    • NOT(~) : 위에서 나온 비트부정

    논리 연산자와 비슷하면서도 다른 것이 있으니 유의해서 구분해야 할 것 같다.

    //비트 연산자
    //8421 => 4bit
    int x = 5; //0101 -> 4 + 1
    int y = 3; //0011 -> 2 + 1
    
    Console.WriteLine(x & y); // And : 1 (0001) 겹치는 것만 남김
    Console.WriteLine(x | y); // OR : 7 (0111) 1과 0이 겹치면 1로, 1과 1이 겹치면 1, 0은 0
    Console.WriteLine(x ^ y); // XOR : 같은 것을 더하면 0이 됨 ex) 1+1 = 0, 0+0 = 0 (0110)
    // 0101
    // 0011
    // -> 0110
    Console.WriteLine(~x); //NOT : -6 1110 앞에 1이 생기는 게 음수 표현, 0110 = 6, 1110 = -6
    

     

     

     

     

     

     

    (10) 시프트 연산자

     

    비트를 좌우로 이동한다.

    • << : 왼쪽으로 이동
    • >> : 오른쪽으로 이동

     

    마치 화살표 같아 방향을 쉽게 알 수 있긴 하다.

    //시프트 연산자
    int value = 4; //0100
    Console.WriteLine(value << 1); //왼쪽이동 : 8 (1000) -> *2
    Console.WriteLine(value << 2); //왼쪽이동 : 16 = 2x2x4
    Console.WriteLine(value >> 1); //오른쪽 이동 : 2 (0010) -> /2
    

     

     

     

     

     

    (11) 삼항 연산자

     

    개인적으로 뉴비인 나에게 어렵다고 생각한다.

    예시 코드로

     

    int a = 10, b = 20;

    int max; 

     

      max     =  ( a  <  b )    ?    a   :   b;

    (변수명) =  (   비교  )    ?   참  : 거짓;

     

    우선 비교를 먼저 한다.

    a < b     =>   10 < 20

     

    비교했을 때 b가 더 큰 게 맞으니 참이 된다.

    참이면 a가 max의 값이 되어서 10이 출력된다.

    //삼항 연산자
    int a = 10, b = 20;
    
    int max;
    
    max = (a < b) ? a : b;
    // 1. (a < b) 비교 => false
    // 2. ( 비교 ) ? 참 : 거짓 ;
    // 3. 비교 했을 때 false 이면 b의 값이 max가 되고, true이면 a의 값이 max가 된다.
    Console.WriteLine(max);
    
    //응용법
    int key = 1;
    
    string str;
    str = (key == 1) ? "문이 열렸습니다." : "문이 열리지 않았습니다.";
    
    Console.WriteLine(str); //문이 열렸습니다.
    
    //연산자 우선 순위
    int result = 10 + 2 * 5; //곱셈이 덧셈보다 우선
    Console.WriteLine(result);
    
    int adjustedResult = (10 + 2) * 5; //괄호 우선
    Console.WriteLine(adjustedResult);

     

     

     

     

    첫 번째 실습

    연산자를 응용해서 실습한 학점 평균 계산 프로그램이다.

    //문제1. 학점 평균 계산 프로그램
    Console.Write("국어 점수를 입력하세요: ");
    int iKor = int.Parse(Console.ReadLine());
    
    Console.Write("영어 점수를 입력하세요: ");
    int iEng = int.Parse(Console.ReadLine());
    
    Console.Write("수학 점수를 입력하세요: ");
    int iMath = int.Parse(Console.ReadLine());
    
    int sum = iKor + iEng + iMath;
    float average = (float)sum / 3;
    
    Console.WriteLine("문제1. 학점 평균 계산 프로그램");
    Console.WriteLine("총점: " + sum);
    Console.WriteLine("평균: " + average);
    

     

     

     

     

    두 번째 실습

    비트 반전 연산자 활용 프로그램

    //문제2. 비트 반전(~) 연산자 활용 프로그램
    
    //~ 비트 반전
    //10 1010 -> 이진수
    //   0101 -> 0이 1로, 1이 0으로, 4바이트 
    
    Console.Write("정수를 입력하세요: ");
    int num = int.Parse(Console.ReadLine());
    int result = ~num;
    
    Console.WriteLine("문제2. 비트 반전(~) 연산자 활용 프로그램");
    Console.WriteLine("원래 값: " + num);
    Console.WriteLine("~ 연산자 적용 후: " + result);
    

     

     

     

     


     

     

     

    점점 알아야할 정보가 많아지니.. 헷갈리는 건 기본이고 기억도 잘 안 난다....

    벌써부터 이러면 안 되니 복습에 복습에 복습....은 필수다...........

     

    악으로 깡으로 외우는 것보다 문제 풀이하면서 하면 나름 잘 되니

    실습이라도 많이 해야할 것 같은 생각이다 ..

     

    화이팅 크아악


    목차