감자코딩
  • JAVA 연산자 기본개념 및 기초
    2024년 07월 22일에 업로드 된 글입니다.
    작성자: gamzah
    반응형

    1. 연산자

    1.1 연산자와 피연산자

    • 연산자 : 연산을 수행하는 기호 (+,-,*,/ 등)
    • 피연산자 : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)

    1.2 식과 대입 연산자

    • 계산만 하면 의미없음, 값을 변수에 저장해야함
    • 저장하지 않고 결과만 출력하길 원하면 println 메서드로 출력만 하는것도 가능

    1.3 연산자의 종류

     

    종류 연산자 설명
    산술 연산자 + - * / % << >> 사칙연산, 나머지 연산
    비교 연산자 > < >= <= == != 크고 작음, 같고 다름 비교
    논리 연산자 && || ! & | ^ ~ AND, OR 조건 연결
    대입 연산자 = 우변의 값을 좌변에 저장
    기타 (type) ?: instanceof 형변환 연산자, 삼항 연삱ㅏ, instanceof 연산자

     

    피연산자의 개수에 의한 분류

    • 단항 연산자 : 피연산자의 개수가 하나
    • 이항 연산자 : 피연산자의 개수가 둘
    • 삼항 연산자 : 피연산자의 개수가 셋

    → 대부분 연산자는 이항연산자, 삼항 연산자는 ?: 하나 뿐

    1.4 연산자의 우선순위와 결합규칙

    • 산술 > 비교 > 논리 > 대입
    • 단항 > 이항 > 삼항
    • 단항 연산자, 대입 연산자 제외 연산 진행방향은 왼쪽에서 오른쪽

    1.5 산술 변환

    • 두 피연산자의 타입을 같게 일치시킨다 (보다 큰 타입으로 일치)
    • 피연산자의 타입이 int 보다 작은 타입이면 int로 변환된다
    • ex) byte + short → int + int → int
      (가장 효율적으로 처리할 수 있는 타입이 int이기 때문)

    2. 단항 연산자

    2.1 증감 연산자

    • 증가 연산자 : ++ 피연산자의 값을 1 증가
    • 감소 연산자 : -- 피연산자의 값을 1 감소
    • 전위형 : 값이 참조되기 전에 증가 (j = ++i;)
    • 후위형 : 값이 참조된 후에 증가 (j = i++;)

    식에 두번 이상 포함된 변수에 증감연산자를 사용하는 것은 피해야 함

    2.2 부호 연산자

    boolean, char 제외한 기본형에만 사용

    3. 산술 연산자

    3.1 + - * /

    • 피연산자가 정수형일 경우 0으로 나눌 수 없다 (실행 시 에러)

    ex) System.out.println(3/0); // ArithmeticException 에러 발생

    System.out.println(3/0.o); // Infinity 출력

    • 연산 할 때 이미 오버플로우가 발생한 값을 아무리 long 타입에 저장해도 소용 없음 → 연산하는 타입 중 하나라도 큰 타입으로 형변환 후 연산

    3.2 나머지 연산자 %

    • 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값
    • 부호는 무시된다

    4.비교 연산자

    연산 결과는 true, false 뿐

    4.1 대소비교 연산자 <> <= >=

    • boolean 제외 나머지 자료형에 다 사용 가능
    • 참조형에는 사용 불가

    4.2 등가비교 연산자 == !=

    • 두 피연산자의 값이 같은지, 다른지 비교
    • 모든 자료형에 사용 가능

    ex ) 10 == 10.0f (true) → 이항연산자이므로 형변환을 통해 타입 맞춘 뒤 피연산자 비교함

    ex ) 0.1 == 0.1f (false) → 정수형과 달리 실수형은 근사값으로 저장되어 오차 발생할 수 있음

    • float를 double로 형변환 해도 나머지를 0으로 채울 뿐 값은 안변하기때문에 오차가 적어지는게 아님

    문자열의 비교

    문자열 비교는 == 쓰는 거 아니고, equals() 메서드 사용

    객체가 달라도 내용이 같으면 true 반환

    5. 논리 연산자

    둘 이상의 조건을 AND, OR로 연결하여 하나의 식으로 표현

    5.1 논리 연산자 &&, ||, !

    • || (OR) : 피연산자 중 어느 한 쪽만 true면 true를 결과로 얻음
    • && (AND) : 피연산자 양쪽 모두 true여야 true를 결과로 얻음
    • OR과 AND가 함께 쓰여아 할 경우 괄호를 사용해 우선순위를 명확히 해주는 것이 좋다

    효율적인 연산

    • OR => 좌측 피연산자가 참이면 항상 참
    • AND => 좌측 피연산자가 거짓히면 항상 거짓

    ※ 항상 같은 조건식이라도 피연산자의 위치에 따라 연산속도가 달라진다

    (참일 확률이 높은 피연산자를 연산자의 왼쪽에 두어야 더 빠른 연산결과를 얻음)

    예제 3-26)

    int a = 5;
    int b = 0;
    a != 0 || ++b != 0 // true, a=5, b=0
    a == 0 && ++b != -0 // false, a=5, b=0

    ++했는데도 저런 결과가 나오는 이유는

    • OR의 경우 좌측 피연산자 (a!=0)이 참이라서 우측 피연산자 평가 없이 바로 true로 평가
    • AND의 경우 좌측 피연산자 (a==0)이 거짓이라서 우측 피연산자 평가 없이 바로 false로 평가

    논리 부정 연산자 !

    true, false를 반대로 바꾸는 거

    !!!b → !!true → !false → ture

    5.2 비트 연산자 & | ^ ~ << >>

    비트 단위로 논리 연산

    • OR - 하나라도 1이면 1 (특정 비트 값을 변경할 때 주로 사용)
    • AND - 모두 1이여야 1 (특정 비트 값을 뽑아낼 때 주로 사용)
    • XOR - 값이 다르면 1 (간단한 암호화에 사용)

    비트 전환 연산자~

    • 2진수 0은 1로 1은 0으로
    • 피연산자의 1의 보수를 얻을 수 있음

    쉬프트 연산자 << >>

    • 2진수를 이동해라
    • 빈자리는 0으로 채워짐
    • 부호있는 정수는 부호를 유지하기 위해 피연산자가 음수면 빈자리를 1로 (양수면 0)
    • x >> n은 x * 2ⁿ 과 같고 <<은 나누기와 같음
    • 쉬프트 연산자가 곱셈, 나눗셈보다 속도가 빠르긴 하나 코드의 가독성을 위해 웬만하면 곱셈&나눗셈을 쓰고 빠른 실행속도가 요구되면 쉬프트 연산자를 쓰자.

    6. 그 외의 연산자

    6.1 조건 연산자 ? :

    • 조건식 ? 식 1 : 식 2 → 참이면 식1, 거짓이면 참2
    • 중첩하면 코드가 간략해지긴 하지만 가독성이 떨어지므로 적절히
    • 타입이 다른 경우 산술변환(형변환) 발생함6.2 대입 연산자
    • 가장 낮은 우선선위
    • x=y=3에서 y=3 다음 x=y가 수행됨

    lvalue, rvalue

    • 왼쪽 값 - lvalue
    • 오른쪽 값 - rvalue
    • lvalue는 값 바꿀 수 있는것, rvalue는 변수 및 식, 상수 다 가능

    복합 대입 연산자

    • i = i + 3 은 i += 3 같이 간결하게 표현 가능
    반응형

    'JAVA' 카테고리의 다른 글

    JAVA 객체지향언어 기초  (2) 2024.07.23
    JAVA 배열의 기초 및 개념  (0) 2024.07.23
    JAVA 조건문 기초 및 개념  (2) 2024.07.23
    JAVA 변수의 개념과 기본  (0) 2024.07.22
    JAVA 기본 개념 정리  (1) 2024.07.22
    댓글