[Java의 정석]Chapter3.연산자(16~19)

Chapter 3. 연산자

16. 논리 부정 연산자 !

  • 피연산자가 true이면 false를, false면 true를 결과로 반환
    즉, true와 false를 반대로 바꾸는 것
  • 논리 부정 연산자 !는 조건문과 반복문에서 주로 사용
    ex) '문자 ch는 소문자가 아니다'
    ▶ ch < 'a' || ch > 'z' 보다
    ▶ !('a' <= ch && ch <= 'z') 가 더 알기 쉽다

    ex 식 '!!b' 의 평가과정
    ▶!!b → !!true → !false → true

17. 조건 연산자

  • 조건 연산자 : 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나뿐임
  • 첫 번째 피연산자인 조건식의 평가결과에 따라 다른 결과를 반환. 조건식의 평가결과가 true이면 식1이, false이면 식2가 연산결과가 됨

🍕
result = (x > y) ? x : y; (괄호 생략가능)
위의 문장에서 식 'x>y'의 결과가 True이면, 변수 result에는 x 의 값이 저장, false이면 y의 값이 저장.

result = (x > y) ?  x : y;
→ result = (5 > 3) ? 5 : 3;
→ result = (true) ? 5 : 3;
→ result = 5;
  • 조건 연산자는 조건문인 if문으로 바꿔 쓸 수 있음(코드가 간단)
    ▶조건 연산자 사용
    result = (x > y) ? x : y;
    ▶if문 사용
    if(x > y)
      result = x;     //x>y가 true일 때
    else
      result = y;     //x>y가 false일 때

  • 조건 연산자의 식1과 식2의 타입이 다른 경우, 이항 연산자처럼 산술 변환이 발생
    ▶x = x+(mod < 0.5 ? 0 : 0.5)    //0과 0.5의 타입이 다름
    ▶x = x+(mod < 0.5 ? 0.0 : 0.5)    //0이 0.0으로 자동 형변환
    ▶자동 형변환이 일어나서 double타입으로 통일되고 연산결과도 double타입이 됨

    조건 연산자를 이용해 변수의 절대값을 구한 후, 부호를 붙여 출력하는 예제

18. 대입 연산자

  • 대입 연산자 : 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용
  • 오른쪽 피연산자의 값(식이라면 평가값)을 왼쪽 피연산자에 저장하여 저장된 값을 연산결과로 반환
    ▶System.out.prinln(x=3);    //변수 x에 3 저장
    →System.out.println(3);    //연산결과인 3 출력
  • 연산자들 중 가장 낮은 우선순위를 가져 식에서 제일 나중에 수행
  • 연산 진행방향이 왼쪽에서 오른쪽 방향

🍟 lvalue와 rvalue

  • lvalue(left value) : 대입 연산자의 왼쪽 피연산자
    ▶변수뿐만 아니라 식이나 상수 등 모두 가능
  • rvalue(right value) : 대입 연산자의 오른쪽 피연산자
    ▶반드시 변수처럼 값을 변경할 수 있는 것. 리터럴이나 상수같이 값을 저장할 수 없는 것들은 불가
  • ex) x=3 ( x=lvalue, 3=rvalue )
int i = 0;
3 = i + 3;	//에러.lvalue가 값을 저장하는 공간 아님
i + 3 = i; //에러.lvalue의 연산결과가 리터럴(i+3→0+3→3)

final int MAX = 3; //변수 앞에 키워드 final을 붙이면 상수가 됨
MAX = 10; //에러. 상수(MAX)에 새로운 값을 저장할 수 없음. 한번 저장된 값 못바꿈

19. 복합 대입 연산자

  • 대입 연산자는 다른 연산자(op)와 결합하여 op=와 같은 방식으로 사용
    ▶ex) 'i=i+3'은 'i+=3'과 같이 표현 가능
  • 결합된 두 연산자는 반드시 공백 없이 붙여 써야함
op==
i += 3;i = i + 3;
i -= 3;i = i - 3;
i *= 3;i = i * 3;
i /= 3;i = i / 3;
i %= 3;i = i % 3;
i <<= 3;i = i << 3;
i >>= 3;i = i >> 3;
i &= 3;i = i & 3;
i ^= 3;i = i ^ 3;
i │= 3;i = i │ 3;
i *= 10+j;i = i*(10+j);
  • 마지막 줄 처럼 대입 연산자의 우변이 둘 이상의 항으로 이루어져 있는 경우 'i*=10+j;'를 'i=i*10+j;' 로 오해하지 않도록 유의

좋은 웹페이지 즐겨찾기