[즐거운 자바] 정수, 실수, 산술연산자

정수

8bit = 1 byte
[부호비트] [ ] [ ] [ ] [ ] [ ] [ ] [ ]

  • 부호비트가 0 이면 양수, 1 이면 음수가 된다
  • 그래서 7bit 만 사용할 수 있고 1byte에서 가장 큰 수는 01111111(2) = 127 가 된다

16bit =4byte

  • 1bit는 부호비트로 사용하고 15bit를 표현하는 데 사용할 수 있다

  • byte = 1 byte : -128(-2의 7승) ~ 127(2의 7승)
  • short = 2byte : 2의 15승
  • int = 4 byte : 2의 31승
  • long = 8 byte : 2의 63승
    • 뒤에 L이나 l을 붙히면 long 타입이 되는데, 헷갈리기에 L(대문자)로 많이 쓴다

int x = 5; 숫자 5는 리터럴이며 int 타입이다

long y = 5L; y는 long 타입이다. 5은 long 타입 리터럴이다.

음의 정수

2의 보수로 처리해준다 -1을 만들려면

  1. 보수처리 0을 1로, 1을 0으로 바꿔준다
  2. 1을 더해준다

1 = 0000 0001 을 음수로 만들자

  1. 1111 1110
  2. 1111 1111

값의 범위 쉽게 계산하기

byte는 8 bit를 쓰고 1을 부호비트로 사용하기 떄문에
2의 (8-1)승이다

마찬가지로 long은 8byte 이기 떄문에 64bit(8bit*8)를 사용하고
1bit는 부호비트이기 때문에
2의 (64-1)승 이다

왜 값의 범위에서 -1을 해야할까?

부호비트를 빼고 총 7bit를 사용할 수 있다.
7비트로 표현할 수 있는 숫자의 갯수는 127개이다.

그래서 양수 부분(부호 비트가 0)에서 0 ~ 127까지 표현해서 127개를 사용하고,
음수 부분(부호 비트가 0)에서 -1 ~ -128를 표현한다.

127 = 0111 1111 를 음수로 만들자

  1. 1000 0000
  2. 1000 0001 = -127

-127에서 -1 을 더해서 -128을 만들자 1000 0001 (-127)

  • 1111 1111 (-1) = 1 1000 0000 (-128) 🔝
    이렇게 오버플로우 된 캐리비트(올림)는 버린다
    그래서 -128은 이진수로 1000 0000 이 된다

정수의 최댓값과 최솟값

자바 문서를 보면 Integer 클래스에 정의된 필드가 어떤 것이 있는지 볼 수 있다

image

public class Hello {
    public static void main(String[] args){
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Double.MAX_VALUE);
    }
}

와 같이 사용할 수 있다.

오버플로우

계산 결과가 최댓값을 넘거나 최솟값보다 작을 경우 양수->음수, 음수->양수로 바뀌는 문제.

public class Hello {
    public static void main(String[] args){
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MIN_VALUE-1);
    }
}

를 하면

-2147483648 2147483647

가 출력된다

127 +1 을 하면 -128이 된다.

실수

float

  • 5.2f 는 float 형 이 된다
  • 4byte
  • 소수점 아래 6자리 까지 오차없이 표현할 수 있다

double

  • 5.2라는 리터럴은 double 형이 된다
  • 5.2D라고 명시적으로 표현할 수 있지만 생략 가능하다
  • 8byte
  • 소수점 아래 15자리 까지 오차없이 표현할 수 있다

산술 연산자

  • / : 나누기 정수를 정수로 나누면 잘림 현상이 발생한다. 5/2는 2로 소수 뒷 부분이 버려진다
  • % : 모듈러(나머지)
  • () : 괄호 안의 내용부터 계산한다

증가 연산자와 감소 연산자

  • ++ : 메모리에 있는 값을 1만큼 증가시킨다
    • a++ : a 에 1을 더한다
      a++;
      
  • – : 메모리에 있는 값을 1만큼 감소시킨다
    • a– : a 에 1을 뺀다

산술 대입 연산자

a=5;
a+=3; // a=a+3; 과 같은 말이다 -> 8이 된다
a*=2
a/=2
a%=2

Categories:

Updated:

Leave a comment