개발자꿈나무
자바 - Math.round(), 나머지, 비교, 논리, 삼항, 대입 연산자 본문
>>> Math.round() - 반올림
- 실수를 소수점 첫째자리에서 반올림한 값을 반환
long result = Math.round(4.253); // result에 4가 저장된다.
// Math.round() 이용해서 소수점 넷째자리 반올림하기
public static void main(String[] args) {
double pi = 3.141592; // 3.142의 값을 얻고싶다면?
System.out.println(pi);
System.out.println(pi*1000);
System.out.println(Math.round(pi*1000));
System.out.println(Math.round(pi*1000)/1000); //3
System.out.println((double)Math.round(pi*1000)/1000); //3.142
// 소수점 뒷자리를 원하는 만큼만 출력하고 싶다면?
float pi = 3.141592f; // 3.141f
System.out.println(pi);
System.out.println(pi*1000);
System.out.println((int)(pi*1000));
System.out.println((int)(pi*1000)/1000.0f);
>>> 나머지 연산자 - %
- 피연산자로 나누고 남은 나머지를 반환
- 홀수, 짝수 등 배수검사에 주로 사용
- 나누는 피연산자는 0이 아닌 정수만 허용 (부호는 무시됨)
// 나머지 연산자
System.out.println(10/8); // 1
System.out.println(10%8); // 2
System.out.println(10%-8); // 2
System.out.println(-10%8); // -2
System.out.println(-10%-8); // -2
>>> 비교 연산자 - > < >= <= == !=
- 두 피연산자를 비교해서 true(참) 또는 false(거짓)을 반환
‘A’ < ‘B’ -> 65 < 66 -> true
‘0’ == 0 -> 48 == 0 -> false
‘A’ != 65 -> 65 != 65 -> false
10.0d == 10.0f -> 10.0d == 10.0d -> true
0.1d == 0.1f -> 0.1d == 0.1f -> false
(float)0.1d == 0.1f -> 0.1f == 0.1f -> true
(주의! 10.0f는 오차없이 저장할 수 있는 값이라서 double로 형변환해도 그대로 10.0이 되지만, 0.1f는
double로 형변환하는 과정에서 미세한 오차가 생길수도 있으므로 false가 나옴. 둘을 비교할 때는
float타입으로 형변환 후 비교해야함!!
- 문자열 비교에는 == 대신 equals()를 사용해야 한다
String str1 = (“abc”);
String str2 = (“abc”);
System.out.println(str1==str2); // true
System.out.println(str.equals(str2)); // true
String str1 = new String (“abc”);
String str2 = new String (“abc”);
System.out.println(str1==str2); // false
System.out.println(str1.equals(str2)); // true
>>> 논리 연산자 - && || / 논리 부정 연산자 - !
- && (and 결합) - 피연산자 양쪽 모두 true여야 true의 결과값을 얻는다.
- || (or 결합) - 피연산자 중 어느 한쪽이 true이면 true의 결과값을 얻는다.
1) x는 10보다 크고, 20보다 작다.
x > 10 && x < 20
10 < x && x < 20 으로도 표현 가능!
2) i는 2의 배수 또는 3의 배수이다.
i = 8
i%2 == 0 || i%3 == 0
-> 8%2 == 0 || 8%3 == 0
-> 0 == 0 || 2 == 0
-> true || false
-> true
3) i는 2의 배수 또는 3의 배수이지만, 6의 배수는 아니다.
( i%2 == 0 || i%3 ) == 0 && i%6 != 0
4) 문자 ch는 숫자(‘0’~’9’)이다. (많이 쓰이는 코드)
‘0’ <= ch && ch <= ‘9’
5) 문자 ch는 대문자 또는 소문자이다.
( ‘A’ <= ch && ch <= ‘Z’ ) || ( ‘a’ <= ch && ch <= ‘z’ )
3. ! (논리 부정 연산자) - true를 false로, false를 true로 바꾼다.
boolean b = true
!!b -> !!true -> !false -> true
문자ch는 소문자가 아니다. (둘은 같은 표현이나 논리 부정 연산자를 사용한 것이 가독성이 더 좋음)
ch < ‘a’ || ch > ‘z’ <-> !(‘a’ <= ch && ch <= ‘z’)
// 논리 (부정) 연산자
public static void main(String[] args) {
boolean b = true;
char ch = 'C';
System.out.printf("b=%b%n",b); // true
System.out.printf("!b=%b%n",!b); // false
System.out.printf("!!b=%b%n",!!b); // true
System.out.printf("!!!b=%b%n",!!!b); // false
System.out.println();
System.out.printf("ch=%c%n",ch); // C
System.out.printf("ch<'a' || ch>'z'=%b%n",ch<'a'||ch>'z'); // true
System.out.printf("!('a'<=ch && ch<='z')=%b%n",!('a'<=ch && ch<='z')); // true
System.out.printf("'a'<=ch && ch<='z'=%b%n",'a'<=ch && ch<='z'); // false
>>> 삼항 연산자, 대입 연산자
- 조건 연산자 - ? :
1) 조건식의 결과에 따라 연산결과를 달리한다.
result = (x > y) ? x : y ; <——> if (x>y) {
같은 뜻 result = x;
} else {
result = y;
}
-> x>y가 true이면 x의 값, false이면 y의 값을 가진다.
2) 두 피연산자의 타입이 다른 경우, 이항 연산자처럼 산술변환이 발생한다.
x = x + (mod < 0.5 ? 0 : 0.5) // 0과 0.5의 타입이 다른다.
-> x = x + (mod < 0.5 ? 0.0 : 0.5) // 0이 0.0으로 자동 형변환되었다.
// 조건 연산자 예시
int x, y, z;
int absX, absY, absZ;
char signX, signY, signZ;
x = 10; y = -5; z = 0;
absX = x >= 0 ? x : -x;
absY = y >= 0 ? y : -y;
absZ = z >= 0 ? z : -z;
signX = x > 0 ? '+' : ( x==0 ? ' ' : '-');
signY = y > 0 ? '+' : ( y==0 ? ' ' : '-');
signZ = z > 0 ? '+' : ( z==0 ? ' ' : '-');
System.out.printf("x=%c%d%n", signX, absX); // +10
System.out.printf("y=%c%d%n", signY, absY); // -5
System.out.printf("z=%c%d%n", signZ, absZ); // 0
2. 대입 연산자 - =
1) 오른쪽 피연산자를 왼쪽 피연산자에 저장 후 저장된 값을 반환
2) rvalue : 대입 연산자의 오른쪽 피연산자
3) lvalue : 대입 연산자의 왼쪽 피연산자 - 저장공간에는 변수나 배열이 들어가야 하고, 리터럴은 에러
int i = 0;
3 = i + 3; // ERROR. lvalue가 저장할 수 있는 값이 아님
i + 3 = i; // ERROR. lvalue의 연산결과가 리터럴 (i+3 -> 0+3 -> 3)
final int Max = 3; // 변수 앞에 키워드 final을 붙이면 상수가 된다.
Max = 10; // ERROR. 상수에 새로운 값 저장 불가
3. 복합 대입 연산자 - op=
- 식 하나만 외워두면 나머지는 똑같음!
맨 마지막 식처럼 우변이 둘 이상의 항일 경우 ( )로 연결되어있다는 것만 주의!
'자바' 카테고리의 다른 글
String 클래스 (0) | 2023.01.25 |
---|---|
자바 - String 객체에 대해서 알아보기 (0) | 2023.01.10 |
자바 - 연산자, 형변환 (0) | 2022.12.29 |
자바 - Printf() 출력, Scanner 활용 (0) | 2022.12.28 |
자바 - 변수, 리터럴 (1) | 2022.12.26 |