연산자

TIL·2022년 12월 9일
0

Java (최은빈)

목록 보기
5/27
package me.day03.operator;

public class DataOperationsExample {
    public static void main(String[] args) {
        // operations(연산), operator(연산자), operand(피연산자), expression(연산식)

        int aa;
//        aa += 3; // 초기화 안됐으므로 에러 (aa = aa + 3)

        //// 산술
        int a = 5;
        int b = 2;
        System.out.println(a/b); // 2
        System.out.println(a%b); // 1

        //// 문자열 연결 +

        //// 대입
        a = 10;
        a -= 3; // a = a - 3
        System.out.println(a); // 7
        System.out.println(a - 3); // 4
        System.out.println(a); // 7

        //// 증감
        int a1 = 10;
        a1++; // a = a + 1
        System.out.println(a1); // 11
        ++a1; // a = a + 1
        System.out.println(a1); // 12

        int a2 = 10;
        int val = a2++; // val = a2; -> a2 증가
        System.out.println(val); // 10
        System.out.println(a2); // 11

        int val2 = ++a2; // a2 증가 -> val = a2;
        System.out.println(val2); // 12
        System.out.println(a2); // 12

        //// 논리 : !, &&, || (not, and, or)
        if (a>=1 && a<=10) { // 1<=a<=10 불가 (파이썬은 가능)
            System.out.println("1~10"); // 전부 참일때 출력
        }

        if (!(a>=1 && a<=10)) { // a<1 || a>10 (반전)
            System.out.println("1~10");
        }

        //// 조건
        int min = (a < b)? a : b;
        // if (a < b) min = a;
        // else min = b;
        // 와 동일
        Math.min(2, 3); // 2 (더 작은것 반환) // Math.min() 함수도 조건 연산자로 구현되어 있음

        // 삼항 연산자에서 피연산자 세개 가능
        int score = 80;
        char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
        System.out.printf("%d점은 %c 등급입니다\n", score, grade);

        //// 비트 : ~, &, |, ^
        // ~00000000 = 11111111
        // 00000010 & 00000011 = 00000010
        // 00000010 | 00000011 = 00000011

        // 코드에 분기가 많이 생길때의 문제점은?
        // 조건식도 이진수 -> 십진수, true/false 판단 할때 실행 stop 하므로 시간 오래 걸림
        int data = 3;
        if (data >= 0 && data < 256) System.out.println("0~255");
        else System.out.println("not valid");

        // 조건문 대신 비트 연산자로 분기 줄일 수 있음 (삼성 기출)
        // 0 = 00000000, 1 = 11111111
        // [들어온 데이터의 이진수] & 10000000 의 첫번째 자리가 1 나오면 255보다 큰것
        // 어차피 하드웨어는 이진수로 비트 연산 하므로 조건 분기 안하고 비트 연산 하면 속도 빨라짐 (자바도 연산자 내부 구현은 다 C, C++ 네이티브)

        // 다만 data = -1 이면 if 조건식의 앞부분만 수행 후 뒷부분은 수행 안되므로 조건식의 해석 빠른경우도 있음 (연산자의 단축 계산)
        // || 도 마찬가지

        //// 쉬프트 : >>, <<, >>>
        // 10 * 2 보다 1010 << 1 이 더 빠름 (20)
        // 1010 << 1 == 10100 == 2^0*0 + 2^1*0 + 2^2*1 + 2^3*0 + 2^4*1 == 20
        // 1010(2) == 10(10), 비트를 왼쪽으로 한번 쉬프트하면 *2 와 같음 (뒤에 0 하나 생긴다)

        // cf
        // 1010<<2 == 101000 == 10*2^2 == 40
        // 1010>>1 == 101 == 10/2^1 == 5 (맨뒤가 1이여도 탈락됨)
        // 1010>>2 == 10 == 10/2^2 == 2 (비트에서 소수점은 무시)
        // 하드웨어, 압축에서 최적화와 관련
    }
}

0개의 댓글

관련 채용 정보