이것이 자바다 - Part 03

mj·2023년 1월 9일
0
post-thumbnail

Part 03 연산자

부호/증감 연산자


부호 연산자

부호 연산자는 변수의 부호를 유지하거나 변경한다.

연산식설명
+피연산자피연산자의 부호 유지
-피연산자피연산자의 부호 변경

증감 연산자

증감 연산자는 변수의 값을 1 증가시키거나 1 감소시키는 연산자이다.

연산식설명
++피연산자피연산자의 값을 1 증가시킴
--피연산자피연산자의 값을 1 감소시킴
피연산자++다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴
피연산자--다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴

산술 연산자

산술 연산자는 더하기, 빼기. 곱하기, 나누기, 나머지로 총 5개이다.

연산식설명
피연산자 + 피연산자덧셈 연산
피연산자 - 피연산자뺄셈 연산
피연산자 * 피연산자곱셈 연산
피연산자 / 피연산자나눗셈 연산
피연산자 % 피연산자나눗셈의 나머지를 산출하는 연산

오버플로우와 언더플로우

오버플로우는 타입이 허용하는 최대값을 벗어나는 것을 말한다. 오버플로우가 발생하면 타입의 최소값으로 돌아간다.
언더플로우는 타입이 허용하는 최소값을 벗어나는 것을 말한다. 언더플로우가 발생하면 타입의 최대값으로 돌아간다.

나눗셈 연산 후 NaN과 Infinity 처리

나눗셈 또는 나머지 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 예외가 발생한다. 하지만 좌측 피연산자가 실수이거나, 우측 피연산자가 0.0, 0.0f 이면 예외가 발생하지 않고 연산의 결과는 Infinity 나 NaN이 된다.

5 / 0.0 -> Infinity
5 % 0.0 -> NaN

연산의 결과가 Infinity 나 NaNㅓ 인지 확인하기 위해 아래와 같은 코드를 사용한다.

int x = 5;
double y = 0.0;
double z = x / y;
//double z = x % y;
//잘못된 코드
System.out.println(z + 2);

//알맞은 코드
if(Double.isInfinite(z) || Double.isNaN(z)) {
    System.out.println("값 산출 불가");
} else {
    System.out.println(z + 2);
}

비교 연산자

비교 연산자는 동등 또는 크기를 평가해서 boolean 타입인 true/flase 를 산출한다.
비교 연산자는 아래와 같다.

구분연산식설명
동등 비교피연산자1 == 피연산자 2두 피연산자의 값이 같은지 검사
동등 비교피연산자1 != 피연산자 2두 피연산자의 값이 다른지 검사
크기 비교피연산자1 > 피연산자 2피연산자1 이 큰지 검사
크기 비교피연산자1 >= 피연산자 2피연산자1 이 크거나 같은지 검사
크기 비교피연산자1 < 피연산자 2피연산자의1 이 작은지 검사
크기 비교피연산자1 <= 피연산자 2피연산자의1 이 작거나 같은지 검사

논리 연산자

논리 연산자는 논리곱, 논리합, 배타적 논리합, 논리 부정연산을 수행한다.

구분연산식설명
AND피연산자 && 피연산자두 피연산자가 모두 true 일 경우만 결과가 true
OR피연산자 || 피연산자두 피연산자중 하나만 true이면 결과가 true
XOR피연산자 ^ 피연산자피연산자 하나는 true 이고, 하나는 false일 경우에 결과가 true
NOT피연산자 ! 피연산자피연산자의 논리값을 바꿈

비트 논리 연산자

비트 논리 연산자는 bit 단위로 논리 연산을 수행한다.

구분연산식설명
AND피연산자 & 피연산자두 bit가 모두 1 일 경우만 결과가 1
OR피연산자 | 피연산자두 bit중 하나만 1이면 결과가 1

비트 이동 연산자

비트 연산자에는 논리 연산자 외에도 이동 연산자가 있다. 비트 이동 연산자는 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행한다.

연산식설명
a << b정수 a의 각 비트를 b만큼 왼쪽으로 이동, 오른쪽 빈자리는 0으로 채움. a * 2^b와 동일한 결과가 됨
a >> b정수 a의 각 비트를 b만큼 오른쪽으로 이동, 왼쪽의 빈자리는 최상위 부호 비트와 같은 값으로 채움. a / 2^b와 동일한 결과가 됨
a >>> b정수 a의 각 비트를 b만큼 오른쪽으로 이동. 왼쪽 빈자리는 0으로 채움

삼항(조건) 연산자

삼항 연산자는 총 3개의 피연산자를 가진다. ? 앞의 피연산자는 boolean 변수 또는 조건식이 오므로 조건 연산자라고도 한다. 이 값이 true 이면 콜론(:) 앞의 피연산자가 선택되고, false이면 콜론 뒤의 피연산자가 선택된다.

조건식 ? 피연산자1 : 피연산자2

문제

  1. 다음 코드를 실행했을 때 출력 결과를 작성해보세요.
int x = 10;
int y = 20;
int z = (++x) + (y--);
System.out.println(z);
  • 31
  1. 다음 코드를 실행했을 때 출력결과를 작성해보세요.
int score = 85;
String result = (!(score>90)) ? "가" : "나";
System.out.println(result);
  1. 534 자루의 연필을 30명의 학생들에게 똑같은 개수로 나누어 줄 때 1인당 몇 개를 가질 수 있고, 마지막에 몇 개가 남는지를 구하는 코드입니다. ()에 들어갈 알맞은 코드를 차례대로 작성해보세요.
int pencils = 534;
int students = 30;
//학생 한명이 가지는 연필 수
int pencilsPerStudent = (              );
System.out.println(pensilsPerStudent);
// 남은 연필 수
int pencilsLeft = (               );
System.out.println(pencilsLeft);
  • int pencilsPerStudent = pencils / students;
  • int pencilsLeft = pencils % students;
  1. 다음은 십의 자리 이하를 버리는 코드입니다. 변수 value 의 값이 356이라면 300이 나올 수 있도록 ( )에 알맞은 코드를 작성하세요(산술 연산자만 사용).
int value = 356;
System.out.println(                );
  • (value / 100) * 100
  1. 다음 코드는 사다리꼴의 넓이를 구하는 코드입니다. 정확히 소수 자릿수가 나올 수 있도록 ( )에 들어갈 수 있는 코드를 모두 선택하세요.
int lengthTop = 5;
int lengthBottom = 10;
int height = 7;
double area = (            );
System.out.println(area);
  • 1, 2, 3, 4
  1. 다음 코드는 비교 연산자와 논리 연산자의 복합 연산식입니다. 연산식의 출력 결과를 작성해보세요.
int x = 10;
int y = 5;
System.out.println( (x>7) && (y<=5) );
System.out.println( (x%3 == 2) || (y%2 != 1) );
  • true
  • false
  1. 다음 연산은 % 연산을 수행한 결과값에 10을 더하는 코드입니다. NaN 값을 검사해서 올바른 결과가 출력될 수 있도록 ( )에 들어갈 코드를 작성해보세요.
double x = 5.0
double y = 0.0;
double z = 5 % y;
if (         ) {
	System.out.println("0.0으로 나눌 수 없습니다.");
} else {
	double result = z + 10;
    System.out.println("결과: " + result);
}
  • Double.isNaN(z)
profile
사는게 쉽지가 않네요

0개의 댓글