산술 연산자
1. 사칙 연산자 +, -, *, /
- 곱셈, 나눗셈, 나머지 연산자가 덧셈, 뺄셈 연산자보다 우선순위가 높으므로 먼저 처리된다.
- 피연산자가 정수형인경우, 나누는 수로 0을 사용할 수 없다. 만일 0으로 나눌 경우, 실행 시에 에러가 발생할 것이다.
- 부동 소수점값이 0.0f, 0.0d로 나누는 것은 가능하지만 그 결과 Infinity(무한대)이다.
- (주의) 같은 의미의 식이라도 연산의 순서에 따라서 다른 결과를 얻을 수 있다.
- Math.round() 사용법
- Math.round(pi * 1000) / 1000.0
- → Math.round(3.141592 * 1000) / 1000.0
- → Math.round(3141.592) / 1000.0
- → 3142 / 1000.0
- → 3.142
2. 나머지 연산자 %
- 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환하는 연산자.
- (주의) 나누는 수(오른쪽 피연산자)로 0을 사용할 수 없다는 점
- 나누는 수로 음수도 허용하나 부호는 무시되므로 결과는 음수의 절대값으로 나눈 나머지와 결과가 같다.
public class C_Arithmetic {
public void method1() {
int num1 = 10;
int num2 = 3;
double dNum1 = 35.0;
double dNum2 = 10.0;
// 정수의 산술 연산
System.out.println("num1 + num2 = " + (num1 + num2));
System.out.println("num1 - num2 = " + (num1 - num2));
System.out.println("num1 * num2 = " + (num1 * num2));
System.out.println("num1 / num2 = " + (num1 / num2)); // 나누기의 몫
System.out.println("num1 / num2 = " + ((float)num1 / num2)); // 형변환
System.out.printf("num1 / num2 = %.1f\\n", ((float)num1 / num2)); // 형변환
System.out.println("num1 % num2 = " + (num1 % num2)); // 나누기의 나머지
System.out.println();
// 실수의 산술 연산
System.out.println("dNum1 + dNum2 = " + (dNum1 + dNum2));
System.out.println("dNum1 dNum2 = " + (dNum1 - dNum2));
System.out.println("dNum1 * dNum2 = " + (dNum1 * dNum2));
System.out.println("dNum1 / dNum2 = " + (dNum1 / dNum2));
System.out.println("dNum1 % dNum2 = " + (dNum1 % dNum2));
// 참고
// System.out.println(5 / 0);
System.out.println(5 / 0.0); // Infinity
System.out.println(5 % 0.0); // NaN(Not a Number) : 숫자가 아니다
System.out.println((5 / 0.0) + 2); // Infinity
System.out.println((5 % 0.0) + 2); // NaN(Not a Number) : 숫자가 아니다.
System.out.println(Double.isInfinite((5 / 0.0) + 2)); // 연산 결과가 Infinity인지 검사하는 코드
System.out.println(Double.isNaN((5 % 0.0) + 2)); // 연산 결과가 NaN인지 검사하는 코드
}
}
4. 비교 연산자
1. 대소비교 연산자 <.>, ≤. ≥
- 두 피연산자의 값의 크기를 비교하는 연산자
- 참이면 true, 거짓이면 false 를 결과로 반환한다.
- boolean 형을 제외한 나머지 자료형에 다 사용할 수 있지만 참조형에는 사용할 수 없다.
- 좌변을 기준으로. 좌변 값이 크거나(>), 작거나(<), 크거나 같으면(≥), 작거나 같으면(≤) true 아니면 false
2. 등가비교 연산자 ==, ! =
- 두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자
- 대소비교 연산자(<, >, ≤, ≥)와는 달리 기본형은 물론 참조형, 즉 모든 자료형에 사용할 수 있다.
- 기본형의 경우 변수에 저장되어 있는 값이 같은지, 참조형의 경우 객체의 주소값을 저장하기 때문에 두 개의 피연산자(참조변수)가 같은 객체를 가르키고 있는지 알 수 있다.
- 정수형과 달리 실수형은 근사값으로 저장되므로 오차가 발생할 수 있다.
- 10.0 ==10.0f : true → 오차없이 저장할 수 있는 값이라서 double로 형변환해도 그대로 10.0
- 0.1 == 0.1f : false → 0.1f는 저장할 때 2진수로 변환하는 과정에서 오차 발생
문자열의 비교
- 두 문자열을 비교할 때는, 비교 연산자 ‘==’ 대신 equals()라는 메서드를 사용한다.
- equals()는 두 문자열의 내용이 같으면 true, 다르면 false
- 객체가 달라도 내용이 같으면 true를 반환한다.
- 대소문자를 구별하지 않고 비교하고 싶으면, equals()대신 equalsIgnoreCase()를 사용한다.
String str = ne String("abc";
boolean result = str.equals("abc"); // result에 true 저장
- String 은 클래스이므로 new를 사용해 객체를 생성해야하지만, 특별히 String만 new를 사용하지 않고 간단하게 쓸 수 있다.
String str = new String("abc") // String클래스의 객체를 생성
String str = "abc"; // 위 문장을 간단히 표현
public class D_Comparison {
public void method1() {
// int num1 = 10;
// int num2 = 25;
// int num3 = 0;
Scanner scanner = new Scanner(System.in);
boolean result = false;
//관계상 잘 사용하지 않는다.
int num1 = 10, num2 = 25, num3 = 0;
System.out.println("num1 == num2 : " + (num1 == num2));
System.out.println("num1 <= num2 : " + (num1 <= num2));
System.out.println("num1 > num2 : " + (num1 > num2));
result = (num1 != num2);
System.out.println(result);
result = ('A' == 65); // 65(A의 코드값) == 65
System.out.println(result);
result = (3.0 == 3); // 3.0 == 3.0
System.out.println(result);
// 대부분의 비교 연산에서는 정수 타입을 사용한다.
result = (0.1 == 0.1f); // false double 0.1 == float 0.1
System.out.println(result);
// 산술연산 + 비교연산
// 사용자에게 입력받은 값이 짝수인지, 홀수인지 판단
System.out.print("임의의 정수를 입력해주세요 > "); // print로 하면 옆에 숫자가 출력 println은 아래에 숫자가 출력
num3 = scanner.nextInt();
// ((num3 % 2) == 0
System.out.printf("%d는 짝수인가요? %b\\n", num3, ((num3 % 2) == 0));
System.out.printf("%d는 홀수인가요? %b\\n", num3, ((num3 % 2) != 0));
// System.out.printf("%d는 홀수인가요? %b\\n", num3, ((num3 % 2) == 1));
System.out.printf("%d는 5의 배수인가요? %b\\n", num3, ((num3 % 5) == 0));
scanner.close();
}
}
'Java' 카테고리의 다른 글
반복문(iteration statements) - for & while & do-while (0) | 2022.08.19 |
---|---|
연산자(Operator) - 논리 연산자 & 그 외의 연산자 (0) | 2022.08.18 |
연산자(Operator) - 연산자(operator) & 단항 연산자 (0) | 2022.08.17 |
변수(Variable) - 형변환 (0) | 2022.08.16 |
변수(Variable) - 변수의 타입 : printf() & Scanner (0) | 2022.08.16 |