자바의 정석_기초편 CHAPTER 3 中 [9 ~ 14] (230731)
3-9. 사칙 연산자.
덧셈 ( + ) , 뺄셈 ( - ) , 곱셈 ( * ) , 나눗셈 ( / ) : 사칙 연산자
알고 있듯이 곱셈, 나눗셈, 나머지 연산자 ( % ) 가 덧셈, 뺄셈 연산자보다 우선순위가 높으므로 먼저 처리한다.
그리고 피연산자가 정수형인 경우, 나누는 수는 0을 사용 불가.
만일 0으로 나눈다면 에러가 발생.
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 4;
System.out.printf("%d + %d = %d%n", a, b, a + b);
System.out.printf("%d - %d = %d%n", a, b, a - b);
System.out.printf("%d * %d = %d%n", a, b, a * b);
System.out.printf("%d / %d = %d%n", a, b, a / b);
System.out.printf("%d / %f = %f%n", a, (float)b, a / (float)b);
}
}
결과 >> 14 // 6 // 40 // 2 // 2.500000
여기서 10을 4로 나눈 값이 2.5 가 아닌 2라는 점을 중요하게 봐야함.
나누기 연산자의 두 피연산자가 모두 int 타입인 경우, 연산결과 역시 int타입.
그래서 실 연산 값이 2.5 일지라도 int 타입 값인 2가 결과로 나옴.
소수점을 저장하지 못하므로 정수만 출력되기 때문. (단, 반올림은 발생하지 않음.)
올바른 값을 내기위해선 가장 아래 식처럼 해야한다. 형변환을 해야함.
3-10. 산술변환
산술변환 : 연산 전에 피연산자 타입의 일치를 위해 자동 형변환되는 것.
이항 연산뿐만 아니라 단항 연산에서도 일어난다.
1. 두 피연산자의 타입을 길게 일치 시킴(보다 큰 타입으로 일치)
long + int -> long + long -> long
float + int -> float + float -> float
double + float -> double + double -> double
2. 피연산자의 타입이 int보다 작은 타입이면 int 로 변환된다.
byte + short -> int + int -> int
char + short -> int + int -> int
첫 번째 규칙은 앞서 자동 형변환에서 배운 것처럼 피연산자의 값손실을 최소화하기 위한 것.
두 번째 규칙은 int 보다 작은 타입, 예로 char 나 short 의 표현범위가 좁아서 연산 중 오버플로우가 발생할 가능성이 높기 때문에 있는 것.
즉, 산술 변환이란 그저 연산 직전에 발생하는 자동 형변환일 뿐.
3-11. Math.round() 로 반올림 하기.
반올림 하기엔 Math.round() 를 사용하면 된다.
소수점 첫째 자리에서 반올림한 결과를 정수로 반환한다.
long result = Math.round(4.52);
// result에 5가 저장된다.
3-12. 나머지 연산자.
나머지 연산자는 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환한다.
나눗셈에서처럼 나누는 수(우측 피연산자) 로 0을 사용할 수 없고, 피연산자로 정수와 실수를 허용한다.
나머지 연산자는 주로 짝수, 홀수 또는 배수 검사 등에 주로 사용된다.
아래의 예제를 보면서 이해하자.
나눗셈 연산자와 나머지 연산자를 이용하는 예제.
public class Main {
public static void main(String[] args) {
int x = 10;
int y = 8;
System.out.printf("%d을 %d로 나누면, %n", x, y);
System.out.printf("몫은 %d이고, 나머지는 %d 입니다.%n", x / y, x % y);
}
}
public class Main {
public static void main(String[] args) {
System.out.println(-10%8);
System.out.println(10%-8);
System.out.println(-10%-8);
}
}
나머지 연산자 (%)는 나누는 수로 음수도 허용.
단, 부호는 무시되므로 결과는 음수의 절대값으로 나눈 나머지와 결과가 같다.
고로 피연산자의 부호를 모두 무시하고, 나머지 연산을 한 결과에 왼쪽 피연산자(나눠지는 수)의 부호를 붙이면 된다.
3-13. 비교 연산자
비교 연산자는 두 피연산자를 비교에 사용된다.
주로 조건문, 반복문의 조건식에 사용, 연산결과는 true 와 false 둘 중 하나가 나온다.
대소비교 연산자. (참이면 true, 거짓이면 false)
비교연산자 | 연산결과 |
> | 좌변 값이 크면, true 아니면 false |
< | 좌변 값이 작으면, true 아니면 false |
>= | 좌변 값이 크거나 같으면, true 아니면 false |
<= | 좌변 값이 작거나 같으면, true 아니면 false |
등가비교 연산자
비교연산자 | 연산결과 |
== | 두 값이 같으면, true 아니면 false |
!= | 두 값이 다르면, true 아니면 false |
-> 두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자.
모든 자료형 (기본형, 참조형) 에 사용가능.
3-14. 문자열의 비교.
두 문자열을 비교할 때는, 비교 연산자 '==' 대신 equals() 라는 메소드를 사용해야 한다.
비교 연산자는 두 문자열이 완전히 같은 것인지 비교할 뿐, 내용의 같은지 비교하기 위해선 equals() 를 사용해야한다.
역시 같으면 true, 다르면 false 이다.
String str = new String("abc");
boolean result = str.equals("abc"); // 내용이 같으니 true 가 저장된다.
String 은 클래스 이므로, new 를 사용해서 새로운 객체를 생성해야한다.
String str = new String("abc");
// String 클래스의 객체를 생성.
String str = "abc";
// 위 문장을 간단히 표현한 것.
만일 대소문자를 구별하지 않고 비교하고자하면 equals() 대신 equalsIgnoreCase() 를 사용하면 된다.
230731 학습
'진행중인 학습 > 자바의 정석_학습' 카테고리의 다른 글
자바의 정석_기초편 CHAPTER 4 (230804) (0) | 2023.08.04 |
---|---|
자바의 정석_기초편 CHAPTER 3 中 [15 ~ 19] (230802) (0) | 2023.08.02 |
자바의 정석_기초편 CHAPTER 3 中 [1 ~ 8] (230728) (0) | 2023.07.28 |
자바의 정석_기초편 CHAPTER 2 中 [10 ~ 17] (230726) (0) | 2023.07.26 |
자바의 정석_기초편 CHAPTER 2 中 [1 ~ 9] (230724) (0) | 2023.07.24 |