개발자꿈나무

자바 - Math.round(), 나머지, 비교, 논리, 삼항, 대입 연산자 본문

자바

자바 - Math.round(), 나머지, 비교, 논리, 삼항, 대입 연산자

망재이 2022. 12. 30. 17:55

>>> 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

 

>>> 논리 연산자 - && ||  /  논리 부정 연산자 - !

 

  1. && (and 결합) - 피연산자 양쪽 모두 true여야 true의 결과값을 얻는다.
  2. || (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. 조건 연산자 - ? :

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=

- 식 하나만 외워두면 나머지는 똑같음! 

   맨 마지막 식처럼 우변이 둘 이상의 항일 경우 ( )로 연결되어있다는 것만 주의!

728x90

'자바' 카테고리의 다른 글

String 클래스  (0) 2023.01.25
자바 - String 객체에 대해서 알아보기  (0) 2023.01.10
자바 - 연산자, 형변환  (0) 2022.12.29
자바 - Printf() 출력, Scanner 활용  (0) 2022.12.28
자바 - 변수, 리터럴  (1) 2022.12.26