[이것이 자바다] 03. 연산자

SeonJin·2023년 8월 28일
0

Java

목록 보기
1/11
post-custom-banner

📚 이것이 자바다 [개정판]


sec01. 부호/증감 연산자

부호 연산자

  • + -
  • 변수 값의 부호를 변경시키는 연산자
  • 부호 변경 후의 타입에 맞게 대입해야 한다

증감 연산자

  • ++ --
  • 변수의 값을 1씩 증가/감소시키는 연산자
  • ++피연산자 피연산자의 값을 1 증가 시킴
  • 피연산자++ 다른 연산을 수행한 후 피연산자의 값을 1 증가 시킴

sec02. 산술 연산자

  • + - * / %
  • 피연산자가 정수 타입(byte, short, char, int)이면 연산 결과는 int타입
  • 피연산자가 정수 타입이고 하나가 long타입이면 연산 결과는 long타입
  • 피연산자 중 하나가 실수 타입이면 연산 결과는 실수 타입 (강제 타입 변환)

sec03. 오버플로우 & 언더플로우

  • 오버플로우: 타입이 허용하는 최대값을 벗어나는 것
  • 언더플로우: 타입이 허용하는 최소값을 벗어나는 것
  • 오버/언더플로우가 발생하면 해당 타입의 최소/최대값으로 되돌아간다
   byte value = 127; // byte 최대값 127
   value++;
   System.out.println(value); // -128(최소값)
   value++; // -127 

sec05. NaN & Infinity 처리

  • 나눗셈 또는 나머지 연산에서 발생
  • int result = 정수 / 0; 정수 / 0, 정수 % 0 → 예외 발생
  • int result = 정수 / 0.0; 정수 / 실수 → Infinity
  • int result = 정수 % 0.0; 정수 % 실수 → NaN
  • 이 경우, 계속해서 연산을 수행하면 데이터가 엉망이 된다
  • 따라서 연산 결과를 확인하고 다음 연산을 수행하는 것이 좋다
    • Double.isInfinite(변수) Double.isNaN(변수)

sec06. 비교 연산자

  • == != > >= < <= (단, 문자열을 비교하는 경우 equals() 사용)
  • 피연산자의 타입이 다른 경우 비교 연산 수행 전 타입을 일치 시켜야 한다

💡 0.1f == 0.1 일 때 0.1f를 double 타입으로 변환하면 false 산출
float 타입과 double 타입의 정밀도에 차이가 있기 때문이다
따라서, 0.1f == (float)0.1 로 타입 변환 후 비교 연산을 시행해야 한다


sec07. 논리 연산자

  • && & || | ^ !

💡 && || vs. & |
&& ||: 앞의 피연산자가 false라면 뒤의 연산자를 평가하지 않고 바로 false 산출
& |: 피연산자를 모두 평가하여 결과를 산출


sec08. 비트 논리 연산자

  • & : 두 비트 모두 1일 경우에만 연산 결과가 1
  • | : 두 비트 중 하나라도 1일 경우 연산 결과가 1
  • ^ : 두 비트 중 하나는 1이고 다른 하나는 0일 경우 연산 결과가 1
  • ~ : 보수
  • bit 단위로 논리 연산을 수행하므로 2진수로 저장되는 정수 타입만 피연산자가 될 수 있다


sec09. 비트 이동 연산자

  • a << b : a 비트를 b만큼 왼쪽으로 이동 (오른쪽 빈 자리는 0으로 채움)(==a*2^b)
  • a >> b : a 비트를 b만큼 오른쪽으로 이동 (왼쪽 빈자리는 최상위 부호 비트와 같은 값으로 채움) (==a/2^b)
  • a >>> b : a의 각 비트를 b만큼 오른쪽으로 이동 (왼쪽 빈 자리는 0으로 채움)

sec10. 대입 연산자

  • = += -= *= /= %= &= |= ^= <<= >>= >>>=

sec11. 삼항(조건) 연산자

  • 조건식 ? true일 때 실행문 : false일 때 실행문
profile
study notebook
post-custom-banner

0개의 댓글