07_정수, 실수 그리고 산술 연산자

Jiyoon.lee·2023년 11월 18일
0

Java_inflearn

목록 보기
7/25

1. 정수형 타입 byte, short, int, long

  • byte 타입은 1byte 크기의 정수값을 가질 수 있다.
  • short 타입은 2byte 크기의 정수값을 가질 수 있다.
  • int 타입은 4byte 크기의 정수값을 가질 수 있다.
  • long 타입은 8byte 크기의 정수값을 가질 수 있다.
  • 리터럴 값인 숫자 5는 int 타입이다.
  • 리터럴 값인 숫자 5L은 long 타입이다. (숫자 뒤에 L 또는 l이 붙음)

*자바는 기본적으로 숫자는 int형으로 인식
int x = 5; 라고 했을 때 x는 int 타입 변수 x라고 말하고, 숫자 5는 변수에 대입되는 리터럴이라고 말한다.
long y = 5L; 이라고 했을 때 y는 long 타입 변수 y라고 말하고, 5L은 long 타입 리터럴이라고 말한다. (소문자 l 보다는 대문자 L을 사용하는게 좋음, 숫자 1로 착각하기 쉽기 때문)

2. 각 정수형 타입별 값의 범위

  • byte (1byte) : -128 ~ 127
  • short (2byte) : -2^15 ~ (2^15 - 1), -32, 768 ~ 32,767
  • int (4byte) : -2^31 ~ (2^31 - 1), -2,147,483,648 ~ 2,147,483,647
  • long (8byte) : -2^63 ~ (2^63 - 1), -9,223,372,036,854,775,808 ~ -9,223,372,036,854,775,807

3. 실수형 타입 float, double

  • float 타입은 4byte 크기의 실수값을 가질 수 있다.
  • double 타입은 8byte 크기의 실수값을 가질 수 있다.
  • 리터럴 값인 숫자 5.2는 double 타입이다.
  • 리터럴 값인 숫자 5.2f는 float 타입이다. (숫자 뒤에 F 또는 f가 붙음)

4. 각 실수형 타입별 값의 범위

  • float (4byte) : (3.4 X 10^-38) ~ (3.4 X 10^38), 리터럴 타입 접미사 : F 또는 f
  • double (8byte) : (1.7 X 10^-308) ~ (1.7 X 10^308), 리터럴 타입 접미사 : D 또는 d(생략 가능)
    *double은 float보다 소수점 이하 부분이 좀 더 정교한 값을 표현할 수 있음

5. float와 double의 유효 자릿수 차이

  • float : 소수 부분 6자리까지 오차 없이 표현할 수 있음
  • double : 소수 부분 15자리까지 오차 없이 표현할 수 있음

6. 산술 연산자

  • 정수와 실수는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지구하기(%)를 할 수 있다.
  • 나머지 연산자는 앞의 숫자를 나누고 나눈 나머지 값을 구한다.

7. 증가 연산자와 감소 연산자

  • 증가 연산자(++)를 사용하면 1이 증가된다.
  • 감소 연산자(--)를 사용하면 1이 감소된다.
  • 증가 연산자와 감소 연산자는 변수의 앞에 붙으면 전위 증가 연산자와 전위 감소 연산자라 부르고, 변수의 뒤에 붙으면 후위 증가 연산자와 후위 감소 연산자라 말한다.
++a, a++, --a, a--
a = 5;
a++;

b = 4;
b--;

a++은 a = a + 1과 같은 뜻이다. a는 6이 된다.
b--는 b = b - 1과 같은 뜻이다. b는 3이 된다.

8. 산술 대입 연산자

  • 산술 대입 연산자는 +=, -=, *=, /=, %=가 있다.
a = 5;
a += 3;

b = 4;
b -= 2;

c = 8;
c *= 2;

d = 4;
d /= 2;

e = 5;
e %= 2;

a += 3은 a = a + 3을 줄인 식이다. a는 8이 된다.
b -= 2는 b = b - 2를 줄인 식이다. b는 2가 된다.

9. 괄호 ()

  • 괄호가 있을 경우 괄호 안의 내용부터 계산한다.
a = 3;
b = 5;

c = a * ( b + 5 );
d = a * b + 5;
  • c와 d에 저장된 값은? 각각 30과 20

10. 정수와 실수의 최솟값과 최댓값

  • int 타입과 double 타입이 표현할 수 있는 최댓값과 최솟값을 출력한다.
public class NumberExam1 {
    public static void main(String[] args) {
        int maxInt = Integer.MAX_VALUE;
        int minInt = Integer.MIN_VALUE;
        
        double maxDouble = Double.MAX_VALUE;
        double minDouble = Double.MIN_VALUE;
        
        System.out.println(maxInt);
        System.out.println(minInt);
        
        System.out.println(maxDouble);
        System.out.println(minDouble);
    }
}
  • 실행 결과 :
2147483647
-2147483648
1.7976931348623157E308
4.9E-324


*MAX_VALUE, MIN_VALUE는 Integer 클래스, Double 클래스가 가지는 필드

*자동차와 엔진을 자바식으로 자동차.엔진이라고 표현할 수 있음
집과 방을 자바식으로 집.방이라고 표현할 수 있음
집, 자동차, 엔진 즉, 우리가 보는 사물들의 설계도를 클래스라고 생각하면 됨
설계도의 위에서 만들어진 실제 자동차를 객체(Object)라고 함 (설계도와 그 설계도로 만들어진 것을 구분할 수 있어야 함)

11. 오버플로우 (overflow)

  • 아래의 프로그램은 결과가 얼마가 나올까?
  • 계산 결과가 최댓값을 넘거나, 최솟값보다 작을 경우 음수는 양수로, 양수는 음수로 바뀌는 문제가 발생하는데 이를 오버플로우라고 한다.
public class NumberOverflow {
    public static void main(String[] args) {
        int value = 10;
        int maxInt = Integer.MAX_VALUE;

        System.out.println(value + 1);
        System.out.println(maxInt + 1);
    }
}

*오버플로우가 발생하는 이유 : 01111111(127)에 1을 더하면 즉, 1byte가 표현할 수 있는 가장 큰 값에 1을 더하면 결과 값이 10000000(-128)이 됨 (맨 왼쪽은 부호 비트, 1이면 음수임)

  • 실행 결과 :
11
-2147483648

0개의 댓글