본문 바로가기
내일배움캠프(Sparta)/Java Handbook

[Java Handbook] Part 2-2

by mmm- 2023. 9. 12.

1. Math

Math

: 수학과 관련된 메서드를 가지고 있는 클래스

 

  • round()
    : 실수를 소수점 첫째자리에서 반올림하여 정수 반환
  • ceil()
    : 올림값을 double형으로 변환
  • floor()
    : 내림값을 double형으로 변환
  • abs()
    : int, double 기본형 모두 사용 가능하며 절대값을 얻음
public class Operator5_1 {
    public static void main(String[] args) {
        long result = Math.round(3.645678);
        System.out.println("result = " + result);

        // 소수점 4째 자리에서 반올림한 값을 구하기
        double pi = 3.141592;
        // pi * 1000 = 3141.592
        // Math.round(3141.592) = 3142
        // 3142 / 1000.0 = 3.142
        double shortPi = Math.round(pi * 1000) / 1000.0;
        System.out.println(shortPi); // 3.142

        // 3.141 구하기
        double pi2 = 3.141592;
        // pi2 * 1000 = 3141.592
        // (int)3141.592
        System.out.println("(int)(pi2 * 1000) = " + (int)(pi2 * 1000)); //3141
        System.out.println("(int)(pi2 * 1000) / 1000.0 = " + (int)(pi2 * 1000) / 1000.0); // 3.141
    }
}
public class Operator5_2 {
    public static void main(String[] args) {
        double num = 3.14;

        System.out.println("반올림 : " + Math.round(num)); // 반올림 : 3
        System.out.println("올림 : " + Math.ceil(num)); // 올림 : 4.0
        System.out.println("내림 : " + Math.floor(num)); // 내림 : 3.0
        System.out.println("절대값 : " + Math.abs(num)); // 절대값 : 3.14
    }
}

2. 나머지 연산자 (%)

  • 나누고 나눈 나머지를 리턴
  • 나누는 피연산자는 0이 아닌 정수만 허용
  • 부호 무시
public class Operator5_3 {
    public static void main(String[] args) {
        int x = 10;
        int y = 8;

        System.out.print("x를 y로 나눈 몫 = ");
        System.out.println(x / y); // x를 y로 나눈 몫 = 1
        
        System.out.print("x를 y로 나눈 나머지 = ");
        System.out.println(x % y); // x를 y로 나눈 나머지 = 2

        // 부호 무시 확인
        int n = 3;
        int z = -3;
        System.out.println("x % n = " + x % n); // x % n = 1
        System.out.println("x % z = " + x % z); // x % z = 1
    }
}

3. 비교 연산자

  • 두 피연산자를 비교해 true or false로 반환
비교 연산자 설명
== 왼쪽과 오른쪽의 피연산자가 같으면 참 반환
!= 왼쪽과 오른쪽의 피연산자가 다르면 참 반환
> 왼쪽의 피연산자가 오른쪽 피연산자보다 크면 참 반환
>= 왼쪽의 피연산자가 오른쪽 피연산자보다 크거나 같으면 참 반환
< 왼쪽의 피연산자가 오른쪽 피연산자보다 작으면 참 반환
<= 왼쪽의 피연산자가 오른쪽 피연산자보다 작거나 같으면 참 반환

 

public class Operator6_1 {
    public static void main(String[] args) {
        int n1 = 10, n2 = 6;
        char c1 = 'A', c2 = 'B';

        System.out.println("n1 >= n2 = "); // true
        System.out.println(n1 >= n2);
        System.out.println("n1 <= n2 = "); // false
        System.out.println(n1 <= n2);

        System.out.println("n1 == n2 = "); // false
        System.out.println(n1 == n2);
        System.out.println("n1 != n2 = "); // true
        System.out.println(n1 != n2);

        // 산술변환 규칙에 의해 char 타입이 int 타입으로 변환되어 연산됨.
        System.out.println("c1 < c2 = "); // true
        System.out.println(c1 < c2); // 65 < 66
        System.out.println("c1 > c2 = "); // false
        System.out.println(c1 > c2); // 65 > 66
    }
}

4. 문자열 비교

문자열을 비교할 때는 equals()를 사용

  • equals
    : 비교하고자 하는 두 피연산자의 값 자체를 비교
  • ==
    : 비교하고자 하는 두 피연산자의 주소값을 비교
public class Operator6_2 {
    public static void main(String[] args) {
        String s1 = "사랑";
        String s2 = "사랑";

        System.out.print("s1 == s2 = "); // true
        System.out.println(s1 == s2);
        System.out.println("s1.equals(s2) = " + s1.equals(s2)); // true

        // but,
        String s3 = new String("사랑");
        System.out.print("s1 == s3 = "); // false
        System.out.println(s1 == s3);
        System.out.println("s1.equals(s3) = " + s1.equals(s3)); // true
    }
}

5. 논리 연산자

논리 연산자 설명
&& 논리식이 모두 참이면 참을 반환 (논리 AND 연산)
|| 논리식이 하나라도 참이면 참을 반환 (논리 OR 연산)
! 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환 (논리 NOT 연산)
public class Operator7_1 {
    public static void main(String[] args) {
        boolean result1, result2, result3, result4, result5, result6;

        char ch1 = 'a', ch2 = 'B'; // 'a': 97, 'A': 65, 'B': 66, 'C': 67

        result1 = ch1 > 'A' & ch2 < 'C';
        result2 = ch1 == 'A' & ch2 < 'C';

        result3 = ch1 > 'A' || ch2 < 'C';
        result4 = ch1 < 'A' || ch2 < 'C';

        System.out.println("&& 연산자에 의한 결과 result1 = " + result1); // true
        System.out.println("&& 연산자에 의한 결과 result2 = " + result2); // false

        System.out.println("|| 연산자에 의한 결과 result3 = " + result3); // true
        System.out.println("|| 연산자에 의한 결과 result4 = " + result4); // false

        System.out.println("! 연산자에 의한 결과 result4 = " + !result4); // true
        System.out.println();

        int num = 10;
        // num은 2의 배수 그리고 3의 배수이다.
        result5 = num % 2 == 0 && num % 3 == 0;
        System.out.println("num은 2의 배수 그리고 3의 배수 = " + result5); // false
        
        // num은 2의 배수 또는 3의 배수이다.
        result6 = num % 2 == 0 || num % 3 == 0;
        System.out.println("num은 2의 배수 또는 3의 배수 = " + result6); // true
    }
}

6. 비트 연산자

비트 연산자 설명
& 대응되는 비트가 모두 1이면 1 반환 (비트 AND 연산)
| 대응되는 비트 중 하나라도 1이면 1반환 (비트 OR 연산)
^ 대응되는 비트가 서로 다르면 1 반환 (비트 XOR 연산)
~ 비트를 1이면 0으로, 0이면 1로 반전 (비트 NOT 연산, 1의 보수)
<< 명시된 수만큼 비트들을 전부 왼쪽으로 이동 (left shift 연산)
>> 명시된 수만큼 비트들을 전부 오른쪽으로 이동 (right shift 연산)
>>> 지정한 수만큼 비트를 전부 오른쪽으로 이동시키고 새로운 비트는 전부 0
  • 비트 연산자는 값을 비트 단위로 연산하기 때문에
    0과 1로 표현이 가능한 정수형이나 형변환이 가능한 자료형만 연산 가능
public class Operator7_2 {
    public static void main(String[] args) {
        // 비트연산자 : 값을 비트 단위로 연산
        // 0과 1로 표현이 가능한 정수형이나 형변환이 가능한 자료형만 연산이 가능

        int num1 = 8, num2 = -8;
        System.out.println("8의 2진수 = " + Integer.toBinaryString(num1)); // 0 생략 가능!
        System.out.println("-8의 2진수 = " + Integer.toBinaryString(num2));
        System.out.println("-9의 2진수 = " + Integer.toBinaryString(-9)); // 32bit, int = 4byte

        // 00000000000000000000000000001000 ,  8
        // 11111111111111111111111111111000 , -8
        System.out.println("& 연산자에 의한 결과 = " + (num1 & num2)); // 00000000000000000000000000001000, 8
        System.out.println("| 연산자에 의한 결과 = " + (num1 | num2)); // 11111111111111111111111111111000, -8
        System.out.println("^ 연산자에 의한 결과 = " + (num1 ^ num2)); // 11111111111111111111111111110000, -16

        System.out.println("~ 연산자에 의한 결과 = " + ~num1); // 11111111111111111111111111110111, -9

        System.out.println("<< 연산자에 의한 결과 = " + (num1 << 2)); // 32
        System.out.println(">> 연산자에 의한 결과 = " + (num2 >> 2)); // -2

        System.out.println(">>> 연산자에 의한 결과 = " + (num2 >>> 2)); // 1073741822
        
        // 진수의 음수를 표현하는 방식 -> 부호 절대값, 1의 보수, 2의 보수
        // 부호 절대값 : 가장 왼쪽에 있는 비트를 부호비트라고 했을 때 이것이 0인지 1인지에 따라 양수, 음수로 구분
        // 1의 보수 : 11111111 - x를 하는 방식. x를 반전시킨 것과 같음
        // 2의 보수 : 100000000 - x를 하는 방식. 가장 왼쪽숫자가 0이면 양수, 1이면 음수를 표현(가장 많이 사용하는 방식)
            // ㄴ 쉽게 계산하는 법 : 1의 보수를 구한 뒤에 나온 수 + 1
    }
}

7. 2진수의 음수 표현

진수의 음수를 표현하는 방식에는 부호 절대값, 1의 보수, 2의 보수가 있다.

 

부호 절대값

: 가장 왼쪽에 있는 비트를 부호비트라고 했을 때 이 부호 비트가 0인지 1인지에 따라 양수와 음수로 구분됨

  • 가장 왼쪽에 있는 비트(부호비트)가 0일 때는 양수, 1인때는 음수
    • 2진수 00000011 = 10진수: 3
    • 2진수 10000011 = 10진수: -3

 

1의 보수

: 11111111 - x 를 하는 방식으로, 11111111 - x는 x를 반전시킨 것과 같음

 

예를 들어, -13을 1의 보수 방식으로 표현하면 

  1. 13을 2진수로 표현: 00001101
  2. 11111111 - x 공식에 대입
  3. 결과: 11110010

 

2의 보수

: 100000000 - x 를 하는 방식으로, 가장 왼쪽 숫자가 0일 경우 음수, 1일 경우 음수를 표현

  • 가장 많이 사용하는 방식

쉽게 계산하는 방법은 1의 보수를 구해서 나온 수에 +1을 해주면 됩니다.

 

예를 들어, -13을 1의 보수 방식으로 표현하면

  1. 13을 1의 보수 방식으로 표현: 00001101 →11110010
  2. 11110010 + 1
  3. 결과: 11110011

8. 조건 연산자

삼항 연산자

: 조건식 ? 반환값1(참일 때 반환) : 반환값2(거짓일 때 반환)

public class Operator8_1 {
    public static void main(String[] args) {
        int num1 = 5, num2 = 7;
        int result;

        result = num1 - num2 > 0 ? num1 : num2;

        System.out.println("두 정수 중 더 큰 수는 " + result + "입니다."); // 7
    }
}

9. 대입 연산자

 

public class Operator8_2 {
    public static void main(String[] args) {
        int num1 = 7, num2 = 7, num3 =7;

        num1 = num1 - 3;
        num2 -= 3;
        num3 =- 3;

        System.out.println("- 연산자에 의한 결과 : " + num1); // 4
        System.out.println("-= 연산자에 의한 결과 : " + num2); // 4

        System.out.println("=- 연산자에 의한 결과 : " + num3); // -3

    }
}

'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글

[Java Handbook] Part 3-2  (0) 2023.09.12
[Java Handbook] Part 3-1  (0) 2023.09.12
[Java Handbook] Part 2-1  (0) 2023.09.12
[Java Handbook] Part 1-4  (0) 2023.09.11
[Java Handbook] Part 1-3  (0) 2023.09.11