19.11.20. 산술연산자, 비교연산자
베이직자바
2019-11-21 01:15:30
▶산술 연산자
- + : 더하기
- - : 빼기
- * : 곱하기
- / : 나누기
- % : 나머지
이항 연산자는 양쪽의 피연산자의 데이터 타입이 일치해야 연산이 가능하다.
수학과 같이 *, /,% 연산자가 +, - 보다 연산의 우선순위가 높다.
우선순위가 동일할 경우 왼쪽부터 연산이 수행된다.
★
-접미사가 붙지 않은 정수는 int 타입이다.
-접미사가 붙지 않는 실수는 double 타입이다.
-작은 쪽에서 큰 쪽으로 데이터 타입이 변할 때에는 생략 가능.
-피연산자의 타입이 서로 다를 경우 표현범위가 큰 쪽으로 형 변환 후 연산이 수행된다.
-따라서 연산의 결과도 표현범위가 큰 쪽의 타입이 된다.
-데이터가 담겨있는 변수의 데이터 타입이 연산 결과의 데이터 타입과 다를 경우 형 변환이 필요하다.
-연산 결과를 형 변환하기 위해서는 연산 부분은 소괄호로 묶어야 한다.
-int보다 작은 정수타입은 int 로 형 변환 후 연산이 수행된다.
(프로그램 자체가 4byte 이상부터 연산이 가능하도록 되어있다고 함. )
★
i = i + 1;
i += 1;
복합 연산자. 위에 것을 줄여 쓴 것. 연산자가 2개 사용됐다.
더하는 값이 1인 경우에는 더 줄일 수 있다.
++i;
i++;
전위형 : 변수가 참조되기 전 수행. 먼저 플러스 한 다음에 읽어오겠다.
후위형 : 변수가 참조된 후 수행. 먼저 읽은 다음에 플러스 1 할 거야.
-숫자 바꾸기
i = i + 2;
i += 2;
-연산자 바꾸기
i = i - 1;
i -= 1;
--i;
i--;
i = i * 2;
i *= 2;
i = i /3;
i /= 3;
i = i % 4;
i %= 4;
-문제1
다음을 한 줄씩 계산해서 최종 결괏값을 출력해주세요.
1. 123456 + 654321
2. 1번 결과 값 * 123456
3. 2번 결과 값 / 123456
4. 3번 결과 값 - 654321
5. 4번 결괏값 % 123456
답 :
double result = 123456 + 654321;
result = result * 123456;
result /= 123456;
result -= 654321;
result %= 123456;
System.out.println(result);
문제 2
3개의 int형 변수를 선언 및 초기화 후 합계와 평균을 구해주세요.
(평균은 소수점 둘째 자리에서 반올림.)
답 :
int num1 = 80;
int num2 = 55;
int num3 = 98;
int sum = num1 + num2 + num3;
double avg = (int)(sum/3d * 10 + 0.5) / 10.0;
System.outprintln("합계 : " + sum + " / 평균 : " + avg);
▶비교 연산자
- < : 작다
- > : 크다
- <= : 작거나 같다.
- >= : 크거나 같다.
- == : 같다.
- != : 같지 않다.
비교 연산자의 결과는 boolean 이다.
산술 연산자와 비교 연산자가 함께 있으면, 산술 연산을 먼저 수행한다.
(= 산술 연산자의 우선순위가 더 높다.)
-
대소 비교는 boolean을 제외한 기본형 타입만 비교할 수 있지만
등가 비교는 모든 타입을 비교할 수 있다.
b = 'A' == 65;
System.out.println(b);
b= true != false;
System.out.println(b);
-
문자열이 같은 경우 같은 주소를 가진다. 같은 스트링 리터럴은 같은 주소를 가진다
b= "abc" == "abc";
System.out.println(b);
-
문자열이 같으면 같은 주소를 가지는데, new 은 새로운 주소를 만드는 거야.
참조형 타입은 저장된 메모리 주소를 비교하기 때문에,
String은 등가 비교 연산자로 내용을 비교할 수 없다.
b = "abc" == new String("abc");
System.out.println(b);
-
내용을 비교하기 위한 매서드가 스트링 속에 있다.
b= "abc".equals(new String("abc"));
System.out.println(b);
equals 를 사용하면 String의 내용을 비교할 수 있다.
-
b= !"abc".equals("ABC");
같지 않다의 결과를 얻기 위해서는 !(NOT)을 앞에 붙여준다.
*float 과 double
b = 10.1f == 10.1;
System.out.println(b);
System.out.printf("%40.39f%n", 10.1f);
f 는 포맷. 21 은 21자리로 표현해줘. 그중 소수점은 20자리.%n은 줄 바꿈.
System.out.printf("%40.39f%n", 10.1);
실수는 값을 정확히 표현하지 못해 근 삿치를 표현한다.
플롯보다는 더블이 좀 더 정확하긴 함.
float과 double은 정밀도가 달라 float 을 double로 형 변환하면
소수점을 정확하게 비교할 수 없다.
double 을 float으로 형 변환해야 정확하게 비교할 수 있다.
'Java' 카테고리의 다른 글
java - 배열 Array (0) | 2023.03.13 |
---|---|
java - 반복문 Repetitive Statement (0) | 2023.03.13 |
java - 조건문 Conditional Statement, import (0) | 2023.03.13 |
java - 논리연산자, 그 외 연산자 (0) | 2023.03.13 |
java - CLASS, 데이터 타입, 리터럴 종류, 형변환 (0) | 2023.03.13 |