2023.05.25.목.TIL

heeh·2023년 5월 25일

TIL

목록 보기
9/82
post-thumbnail

2-5 비트연산자, 연산자 우선순위

연산자 우선순위 w08

  • [연산자 우선순위 : 산술 > 비교 > 논리 > 대입]
    • 연산자 여러개가 함께 있는 연산을 계산 할때는 우선순위가 있다.
    • 위 우선순위에 따라서 최종적인 응답값이 결정된다.
    • 단, 괄호로 감싸주면 괄호 안의 연산이 최우선순위로 계산된다.
      ex) (2 + 2) * 2
  • 비교연산, 논리연산 연산자의 우선순위
    package week02;
    
    public class w08 {
        public static void main(String[] args) {
            int x=2;
            int y=9;
            int z=10;
    
            boolean result = x < y && y < z; //true && true = true
            System.out.println(result);
        }
    }
    • y가 x보다 크고 z가 y보다 큰게 맞기 때문에 모두 true가 성립하고 && 조건에 맞기 때문에 결과 값은 true이다

      				result = x + 10 < y && y < z; //false && true = false
              System.out.println(result);
    • x + 10 = 12, y=9 : false / y = 9, z =10 : true / false && true 의 결과는 false

      				result = x + 2 * 3 > y;
              System.out.println(result); //false
    • x + 2 3에서 2 3 은 6, x + 6은 8 / y는 9이기 때문에 false

      				result =(x + 2) * 3 > y; //true
              System.out.println(result);
    • x + 2는 4, 4 * 3은 12 / y는 9이기 때문에 true

    • 총 코드

      package week02;
      
      public class w08 {
          public static void main(String[] args) {
              int x=2;
              int y=9;
              int z=10;
      
              boolean result = x < y && y < z; //true && true
              System.out.println(result);
      
              System.out.println("--------");
      
              result = x + 10 < y && y < z; //false && true
              System.out.println(result);
      
              System.out.println("--------");
      
              result = x + 2 * 3 > y; //false
              System.out.println(result);
      
              System.out.println("--------");
      
              result =(x + 2) * 3 > y; //true
              System.out.println(result);
          }
      }

산술연산시 타입일치

  • 산술연산할 때 타입이 두 개가 다르다면?
    → 둘 중에 더 큰 타입으로 타입을 일치 시킴!
    - ex) int = 4byte short = 2byte → 4byte로 합쳐짐
  • 연산 전에 두 피연산자의 타입이 다른 경우 타입을 일치시킵니다.
    • 두 피 연산자의 타입을 같게 일치시킨다.
      ( 둘 중에 저장공간 크기가 더 큰 타입으로 일치)
      - 피연산자의 타입이 ‘int’ 보다 작은 ‘short’ 타입이면 ‘int’ 으로 변환
      - 피연산자의 타입이 ‘long’ 보다 작은 ‘int’, ‘short’ 타입이면 ‘Long’ 으로 변환
      - 피연산자의 타입이 ‘float’ 보다 작은 ‘long’, ‘int’, ‘short’ 타입이면 ‘float’ 으로 변환
      - 피연산자의 타입이 ‘double’ 보다 작은 ‘float’, ‘long’, ‘int’, ‘short’, 타입이면 ‘double’ 으로 변환
      - 이 처럼, 변수 여러개를 연산했을 때 결과 값은 피연산자 중 표현 범위가 가장 큰 변수 타입을 가지게 된다.
    • 부분 집합처럼 포함한다라고 생각
  • 더 큰 타입으로 포함/일치 시키기 w09
    package week02;
    
    public class w09 {
        public static void main(String[] args) {
            short x = 10;
            int y = 20;
    
            int z = x + y; //30
    
            long lx = 30L;
            long lz = z + lx; //60
    
            float fx = x; //10
            float fy = y; //20
            float fz = z; //30
    
            System.out.println(lz);
            System.out.println(fx);
            System.out.println(fy);
            System.out.println(fz);
        }
    }

비트

  • 비트 연산
    • Byte 를 8등분 한 것이 Bit
    • Bit 는 0, 1 둘 중에 하나의 값만을 저장하는 컴퓨터가 저장(표현) 가능한 가장 작은 단위
    • 컴퓨터의 가장 작은 단위인 Bit이기 때문에 연산중에서 Bit 연산이 제일 빠름
    • 물론 이전에 배운대로 0, 1 값으로 산술 연산을 하거나, 비교 연산을 할 수 있지만 비트 연산을 통해 자리 수를 옮길 수도 있음
    • 이처럼 Bit의 자리 수를 옮기는 것을 비트 연산이라고 합니다.
    • ‘<<’(왼쪽으로 자리 수 옮기기), ‘>>’(오른쪽으로 자리 수 옮기기)
    • 0, 1 은 2진수 값이기 때문에,
      • 자리 수를 왼쪽으로 옮기는 횟수 만큼 2의 배수로 곱셈이 연산되는 것과 동일
      • 자리 수를 오른쪽으로 옮기는 횟수 만큼 2의 배수로 나눗셈이 연산되는 것과 동일
  • ex) 0101 → 1010 자리를 왼쪽으로 옮김 : 2의 배수로 곱해지는
    • 0101 10진수로 변환 : 2에 0자리, 2에 제곱 자리, 4+1=5
    • 1010 10진수로 변환 : 2+8=10 곱하기 2를 한 것과 같음
  • ex) 1010 → 0101 자리를 오른쪽으로 옮김 : 위와 반대로 2와 나누는 것과 동일

비트 예제 w10

  • (3 << 2) //12 와 (3 << 1) //6 을 통해 비트 예시 알아보기

    package week02;
    
    public class w10 {
        public static void main(String[] args) {
            System.out.println(3 << 2);
            System.out.println(3 << 1);
        }
    }

    • 3을 2진수로 표현하면 2 1 1 → 1 1 2진수 / 2는 1 0 2진수

    • 3 << 2 : 3을 비트연산으로 오른쪽으로 2 만큼 옮기세요

    • 3 <<1 : 3을 비트연산으로 오른쪽으로 1 만큼 옮기세요

      • 1이 있는 자리만 2의 몇 승 붙는 것이 계산되는?!

2-6 if

문맥 만들기 (조건문, 반복문)

  • 조건문(만약에) : if, switch
  • if
    // 조건문
    boolean flag = true;
    
    if (flag) {
    	System.out.println("flag 값은 true 입니다."); // flag 값은 true 입니다. 출력
    }
    • if ( ) { } 주요 골격
      → ( ) 안에는 ‘조건’이 들어감, 값이 입력된 변수가 들어갈 수도 있음
    • 만약에 false가 들어간다면 내부 로직으로 들어가지 않음
  • if else
    // 조건문 with else
    boolean flag = false;
    
    if (flag) {
    	System.out.println("flag 값은 true 입니다."); // 미출력
    } else {
    	System.out.println("flag 값은 false 입니다."); // flag 값은 false 입니다. 출력
    }
    • if가 거짓(false)일 경우 사용

if, if else 예제 w11

  • if true인 경우

    package week02;
    
    public class w11 {
        public static void main(String[] args) {
            boolean flag = true;
    
            if (flag) {
                //true인 경우
    
                System.out.println("값은 true");
            }
        }
    }

    • 값이 정상적으로 나옴
  • if false인 경우

    package week02;
    
    public class w11 {
        public static void main(String[] args) {
            boolean flag = false;
    
            if (flag) {
                //true인 경우
    
                System.out.println("값은 true");
            }
        }
    }

    • 아무 값도 실행 되지 않음
  • false일 때 값을 실행 시키고 싶다 → else 활용

    package week02;
    
    public class w11 {
        public static void main(String[] args) {
            boolean flag = false;
    
            if (flag) {
                //true인 경우
    
                System.out.println("값은 true");
            }
    
            else {
                //false인 경우
    
                System.out.println("값은 false");
            }
    
        }
    }

  • 1 ≠ 1 1은 1이 아니다의 if문

    if (1 != 1) {
                //true인 경우
    
                System.out.println("값은 true");
            }
    
            else {
                //false인 경우
    
                System.out.println("값은 false");
            }

    • 1은 1이기 때문에 아니라는 문장의 답은 false
      → else의 false 결과가 출력됨
  • if else if else (더 확장된 개념)

    • 구조 먼저 잡기
      if () {
      
              } else if () {
      
              } else {
                  
              }
      • 조건이 맞아 떨어지면(true) 그 곳에서 멈춤(걸림), 맞지 않으면(false) 다음으로
      • 그 다음 조건이 맞아 떨어지면(true) 그 곳에 들어가서 수행이 되고, 맞지 않으면(false) 다음으로…
  • else if 무한으로 확장 가능

  • if - else if - else

    • number = 2
      int number = 2;
      
              if (number == 1) {
                  System.out.println("number값은 1입니다.");
              } else if (number == 2) {
                  System.out.println("number값은 2입니다.");
              } else {
                  System.out.println("number값은 몰라용");
              }
    • number = 999

중첩 if 예제 w12

  • if - else 안에 if - else가 또 들어가는 것
    package week02;
    
    public class w12 {
        public static void main(String[] args) {
            boolean flag = true;
            int number = 2;
    
            if(flag) {
                if (number == 1) {
                    System.out.println("flag 값은 true고, number 값은 1입니다");
                } else if (number == 2) {
                    System.out.println("flag 값은 true고, number 값은 2입니다");
                } else {
                    System.out.println("flag 값은 true고, number 값은 몰라용");
                }
                
            } else {
                if (number == 1) {
                    System.out.println("flag 값은 false고, number 값은 1입니다");
                } else if (number == 2) {
                    System.out.println("flag 값은 false고, number 값은 2입니다");
                } else {
                    System.out.println("flag 값은 false고, number 값은 몰라용");
                }
            }
        }
    }

가위 바위 보 만들기?

  • Scanner는 import java.util.Scanner; 확인

    Scanner sc = new Scanner(System.in);
  • A 입력해서 커서가 깜빡이는 효과 (입력해 달라는 효과)

    //A에게 값 입력받기
            System.out.println("A 입력 : ");
            String aHand = sc.nextLine();
    • String aHand는 A에 손이 뭐가 냈는지를 sc.nextLine(); 으로 받을 수 있음
  • 두 개의 값을 비교하는 메소드 -> Object.equals(좌, 우)

    • 왼쪽과 오른쪽이 값이 같으면 true로 반환, 아니면 false로 반환
  • 가위 바위 보!

    package week02;
    
    import java.util.Objects;
    import java.util.Scanner;
    
    public class w13 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            //A에게 값 입력받기
            System.out.println("A 입력 : ");
            String aHand = sc.nextLine();
    
            //B에게 값 입력받기
            System.out.println("B 입력 : ");
            String bHand = sc.nextLine();
    
            //두 개의 값을 비교하는 메소드 -> Object.equals(좌, 우)라는 메소드
            //왼쪽과 오른쪽이 값이 같으면 true로 반환
            //아니면 false로 반환
    
            if (Objects.equals(aHand, "가위")){
                if (Objects.equals(bHand, "가위")) {
                    System.out.println("A와 B는 비겼다");
                } else if (Objects.equals(bHand, "바위")){
                    System.out.println("B가 이겼다");
                } else if ((Objects.equals(bHand, "보"))){
                    System.out.println("A가 이겼다");
                } else {
                    System.out.println("B가 이상한 값을 입력했다");
                }
            } else if (Objects.equals(aHand, "바위")) {
                if (Objects.equals(bHand, "가위")) {
                    System.out.println("A가 이겼다");
                } else if (Objects.equals(bHand, "바위")){
                    System.out.println("A와 B는 비겼다");
                } else if ((Objects.equals(bHand, "보"))){
                    System.out.println("B가 이겼다");
                } else {
                    System.out.println("B가 이상한 값을 입력했다");
                }
            } else if (Objects.equals(aHand, "보")){
                if (Objects.equals(bHand, "가위")) {
                    System.out.println("B가 이겼다");
                } else if (Objects.equals(bHand, "바위")){
                    System.out.println("A가 이겼다");
                } else if (Objects.equals(bHand, "보")){
                    System.out.println("A와 B는 비겼다");
                } else {
                    System.out.println("B가 이상한 값을 입력했다");
                }
            } else {
                System.out.println("A가 이상한 값을 입력했다");
            }
    
        }
    }
    • A : 가위 B : 보
    • A : 바위 B : 보자기
  • 오류?

  • 오류 해결

    • (Objects.equals(aHand, "가위")) 부분에서 “가위” 앞에 b: 가 있어서 b를 지칭하는 이유를 모르겠다고 생각했는데, b:를 쓰거나 b(변수)가 상관있는 것이 아닌 자동으로 생기는 것이었다

국취제 상담

profile
공부하자개발하자으쌰으쌰

0개의 댓글