study/TIL

20241013 TIL

으녕오리 2024. 10. 14. 08:57

<Java 문법 종합반 2주차>

연산자, 조건문과 반복문, 배열, 다차원 배열, 컬렉션

chatper 3. 연산자

  • 피연산자 : 계산의 대상이 되는 것 ( 2 + 1 에서 2 와 1)
  • 연산자 : 계산의 목적이 되는 것 ( 2 + 1 에서 + )

* 모든 토글을 열고 닫는 단축키

Windows : Ctrl + alt + t

Mac : + + t

 

* Java에서 폴더는 package 

  • 사칙연산
package week02;

public class w02 {
    public static void main(String[] args){
        // 사칙연산 : +, -, *, /, %
        System.out.println(4 + 2); //6
        System.out.println(4 - 2); //2
        System.out.println(4 * 2); //8
        System.out.println(4 / 2); //2
        System.out.println(5 / 2); // *2
        System.out.println(2 / 4); // *0
        System.out.println(4 % 2); //0
        System.out.println(5 % 2); //1

        // 우선순위 연산
        System.out.println(2 + 2 * 2); //6
        System.out.println((2 + 2) * 2); //8

        // 변수를 이용한 연산
        int a = 20;
        int b = 10;
        int c;

        c = a + b;
        System.out.println(c); //30
        c = a - b;
        System.out.println(c); //10
        c = a * b;
        System.out.println(c); //200
        c = a / b;
        System.out.println(c); //2
        c = a % b;
        System.out.println(c); //0
    }
}

 

  • 비교연산자
package week02;

public class w03 {
    public static void main(String[] args) {
        System.out.println(10 > 9); // 10이 9보다 크니? 응! -> true
        System.out.println(10 >= 9); //true
        System.out.println(10 < 9); //false
        System.out.println(10 <= 9); //false
        System.out.println(10 == 10); //true
        System.out.println(10 == 9); //false
        System.out.println(10 != 10); //false
        System.out.println(10 != 9); //true
    }
}

 

  • 논리연산자
    • 비교 연산의 결과값으로 받을 수 있는 boolean 값을 연결하는 연산자
    • 조건을 연결했을 때 boolean 값들을 조합하여 참(true) 또는 거짓(false) 값인 boolean 값을 출력
    • ||(OR), &&(AND), !(NOT)
package week02;

public class w04 {
    public static void main(String[] args) {
        boolean flag1 = true;
        boolean flag2 = true;
        boolean flag3 = false;

        System.out.println(flag1); //true
        System.out.println(flag2); //true
        System.out.println(flag3); //false

        // (1) 피연산자 중 하나라도 true이면 true => 또는(OR : ||)
        System.out.println(flag1 || flag2); //true
        System.out.println(flag1 || flag2 || flag3); //true
        System.out.println((5 > 3) || (3 > 1)); //true 또는 true 이므로 -> true
        System.out.println((5 > 3) || (3 < 1)); //true
        System.out.println((5 < 3) || (3 < 1)); //false


        // (2) 피연산자가 모두 true이면 true => 그리고(AND : &&)
        System.out.println(flag1 && flag2); //true
        System.out.println(flag1 && flag2 && flag3); //false
        System.out.println((5 > 3) && (3 > 1)); //true 이고 true 이므로 -> true
        System.out.println((5 > 3) && (3 < 1)); //false

        // System.out.println(1 < 3 < 5); -> 불가능!

        // (3) 논리 부정 연산자(! : NOT) (뒤집은 값)
        System.out.println(!flag1); //false
        System.out.println(!flag3); //true
        System.out.println(!(5 == 5)); //false
        System.out.println(!(5 == 3)); //true
    }
}
  • 대입연산자
    • 변수를 바로 연산해서 그 자리에서 저장하는(대입하는) 연산자
    • =(기본대입연산자), +=, -=, *=, ... (복합대입연산자)
    • ++ : += 1
    • -- : -= 1 
package week02;

public class w05 {
    public static void main(String[] args) {

        // 기본 대입 연산자
        int number = 10;
        number = number + 2;
        System.out.println(number); //12

        number = number % 2;
        System.out.println(number); //0

        // 복합 대입 연산자
        number = 10;
        number += 2; // number = number + 2;
        System.out.println(number); //12

        number -= 2; // number = number - 2;
        System.out.println(number); //10 (***8이 아니다)

        // ++, --
        // number++;
        // number = number + 1;
        // number += 1;
        // 위의 세 줄 다 같은 말임

        number++;
        System.out.println(number); //11

        number--;
        System.out.println(number); //10(11-1)
    }
}

 

  • 대입연산자에서 주의해야 할 점 !!
package week02;

public class w06 {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        int val = ++a + --b; // 11 + 9 = 20 (* +와 -를 숫자 "앞에" 써줘야함!)
        System.out.println(a); // 11
        System.out.println(b); // 9
        System.out.println(val); // 20

        int c = 10;
        int d = 10;
        int val2 = ++c + d--; // c는 연산 전에 +1, d는 연산 후에 -1

        System.out.println(c); //11
        System.out.println(d); //9
        System.out.println(val2); //21
        // 21인 이유 -> c는 연산 전에 수행되어서 11로 연산되지만, d는 연산 후에 수행되어서 10으로 연산된 후 -가 수행되었기 때문에
    }
}

 

  • 기타연산자
package week02;

public class W07 {
    public static void main(String[] args) {
        // (1) 형변환 연산자
        int intNumber = 93 + (int)98.8; // 93 + 98
        System.out.println(intNumber);

        double doubleNumber = (double) 93 + 98.8; //93.0 + 98.8
        System.out.println(doubleNumber);

        // (2) 삼항연산자
        // 비교연산자와 항상 함께 쓰인다.
        // 비교연산자의 결과인 true or false 의 값에 따라 결정되는 무언가
        // 조건 ? 참 : 거짓
        int x = 1;
        int y = 9;

        boolean b = (x == y) ? true : false;
        System.out.println(b); //false

        String s = (x != y) ? "정답" : "오답";
        System.out.println(s); //정답

        int max = (x > y) ? x : y;
        System.out.println(max); // *9

        int min = (x < y) ? x : y;
        System.out.println(min); //1

        // (3) instance of(3주차 -> 클래스, 객체)
        // 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여
        // 맞으면 -> true, 틀리면  -> false
    }
}

 

  • 연산자 우선순위
    • 산술 > 비교 > 논리 > 대입
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; // 우선순위대로 <,> 계산 후 && 계산
        System.out.println(result); // true

        result = x + 10 < y && y < z; // +10 계산 후 <,> 계산 후 && 계산 // **false && ~~ 이면 무조건 false!!!
        System.out.println(result); // false
    }
}

 

  • 산술 변환
    • 연산 전에 피연산자의 타입을 일치시키는 것
    • 둘중에 저장공간 크기가 더 큰 타입으로 일치시킨다. ex) int, short 이면 int로 변환
package week02;

public class W09 {
        public static void main(String[] args) {

            short x = 10;
            int y = 20;

            int z = x + y; // x는 short, y는 int 이므로 더 큰 타입인 int 를 따른다.

            long lx = 30L;
            long lz = z + lx; // z는 int, lx는 long 이므로 long 타입이 된다.

            float fx = x;
            float fy = y;
            float fz = z;
            System.out.println(lz); //60
            System.out.println(fx); //10.0
            System.out.println(fy); //20.0
            System.out.println(fz); //30.0
    }
}

 

  • 비트 연산
    • 8bit = 1byte
    • bit는 0,1 둘 중 하나의 값만을 저장, 컴퓨터의 가장 작은 단위
    • 비트 연산 : bit의 자릿수를 옮기는 것
      • '<<' : 왼쪽으로 자리수 옮기기, '>>' (오른쪽으로 자릿수옮기기)
    • 0,1은 2진수 값이므로,
      • 왼쪽으로 옮기는 횟수만큼 2배로 곱하여 계산됨 ex) 0101(5) -> 1010(10)  
      • 오른쪽으로 옮기는 횟수만큼 2배로 나눠짐 ex) 1010(10) -> 0101(5)
package week02;

public class W10 {
    public static void main(String[] args) {
        
    // (2) 표기는 이 숫자가 이진수값이라는 표식 입니다.
        System.out.println(3 << 2); //12
    // 3의 이진수값인 11(2) 에서 왼쪽으로 '2'번 옮겨져서 1100(2)인 12값이 됩니다.
        System.out.println(3 >> 1); //1
    // 3의 이진수값인 11(2) 에서 오른쪽으로 '1'번 옮겨져서 1(2) 인 1 값이 됩니다.
    }
}