Primitive Type - Java

choizz156·2022년 9월 7일
0

Java Basic

목록 보기
1/10

Primitive type

  • 자바는 변수의 타입과 변수의 이름을 미리 지정하고 사용해야한다.

  • 자바는 8개의 기본형(primitive) 타입이 있고 그 외에는 나머지는 reference 타입이다.

  • 기본형 타입은 그 타입이 할당된 변수에 들어올 수 있는 값이 정해져 있다.

int a = 1; // 정수형만 들어올 수 있다.
char b = 'c'; // ''안에 하나의 문자만 들어올 수 있다.
boolean = true; //true나 false만 들어올 수 있다.
...
  • 기본형 타입들은 다른 기본형 값을 가질 수 없다.

Integer형

  • byte :

    • 8비트(1byte)로 이루어져 있다.
    • 최소 -128에서 127 까지의 범위의 정수형 값을 가질 수 있다.
  • short :

    • 16비트로 이루어져 있다.
    • 32768에서 32767까지의 정수형 범위를 표현할 수 있다.
  • int :

    • 32비트로 이루어짐
    • 2312^{31} ~ 2312^{31}-1 의 범위를 가진다.

👉 32비트에서 메모리를 사용한다면 메모리 용량이 byte나 short보다 int를 사용하는 것이 연산속도가 높다. 대용량 배열에는 byte나 short를 사용해 메모리 용량을 줄일 수 있지만 연산속도가 줄어들 수 있다.

  • long :
    • 64비트로 이루어져 있다.
    • -263 ~ 263 -1 의 범위를 가진다.

정수형 타입의 최대값과 최소값


구분부호 결정(272^7)262^6252^5242^4232^3222^2212^1202^0
양수 최대값01111111127
음수 최소값10000000-128

[그림1] 타입이 byte인 경우(8비트)

👉 밑이 2인 이유는 1 bit는 0과 1로 표현할 수 있기 때문이다(2가지).
👉 이진법은 2의 0승 부터 시작하기 때문에 그림 1과 같이 byte의 경우 최대 자리수는 2의 7승이다.
👉 맨 앞의 비트는 부호를 결정한다. 맨 앞의 비트가 0이면 양수, 1이면 음수이다.
👉 양수의 최대값에서 1을 빼는 이유
- 그림 1.을 보면 양수의 최대 값일 때는 맨 앞의 비트가 0이고 음수의 최소 값일 때는 1이다.
- byte의 양수의 최대값은 6개의 비트가 모두 1이고 이것을 10진수로 표현하면 127이 된다.
- byte의 음수의 최소값은 맨 앞의 비트가 1이고 나머지 비트가 모두 0일 때 이다. 이것을 10진수로 표현하면 -128이 된다.


Float형

  • float :

    • 32비트 (단정밀도)에 대응한다. IEEE 754(IEEE에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준) 소숫점으로 이루어져있다.
    • 부호(1 자리) +지수(8 자리)+가수(23 자리) = 32비트.
  • double:

    • 64비트(배정밀도)에 IEEE 754 소숫점으로 이루어져있다.
    • 부호(1자리) + 지수(11자리) + 가수(52자리) = 64비트.

👉 float과 double은 정확한 숫자를 표현하지 못 한다. 각각 보장된 비트 수를 넘어서면 값의 정확성을 보장할 수 없다.
👉 정확한 숫자를 표현하려면 BigDecimal을 사용해야 한다.
👉 부동 소숫점을 사용하는 이유 : 고정 소숫점을 사용하는 것 보다 더 적은 용량으로 숫자를 표현 가능하다. https://gigglehd.com/gg/hard/5427559


그 외 자료형

  • boolean :

    • true와 false로 이루어져 있다.
    • 1비트의 정보를 나타내지만 크기가 정확하게 정의된 것은 아니다.
  • char:

    • 16비트 단일 유니코드 문자이다.
    • 최소 '\u0000'(or 0) 에서 최대 '\uffff'
      (or 65,535 inclusive).

👉 “”안에 문자열을 사용하면 자동으로 String 클래스 객체가 생성된다. String 객체는 한번 만들어지면 변하지 않는다. 엄밀히 Primitive 타입은 아니다.

기본 값

출처:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

오버 플로우,언더 플로우

구분부호 결정(272^7)262^6252^5242^4232^3222^2212^1202^0
양수 최대값01111111127
음수 최소값10000000-128

[그림1] 타입이 byte인 경우(8비트)

  • 정수형 오버플로우 :

    • 자료형이 표현할 수 있는 범위 중 최대값 이상의 값을 표현한 경우 최대 값을 넘기면 데이터 타입의 최소값으로 순환한다.
    • 예를 들어, byte형인 127에서 1을 더하면 128이 아니라 -128이 된다.
    • 0111_1111이라는 byte의 최대값 표현을 10진수로 바꾸어 1을 더하면 128이 되고, 이것을 다시 이진수로 바꾸면 1000_0000가 되어 10진수로 -128이 된다.
  • 정수형 언더 플로우 :

    • 오버 플로우의 반대이다.
    • 예를 들어, byte형인 -128에서 1을 빼면 127이 된다.
    • 1000_0000를 10진수로 바꾸어 1을 빼면 127이 되고 이것을 다시 2진수로 바꾸면 0111_1111이 된다.
  • 실수형 오버 플로우 :

    • 값이 음의 최소 범위나 양의 최대 범위를 넘어갔을 때 값이 무한대가 된다.
  • 실수형 언더플로우 :

    • 음의 최대 범위나 양의 최소 범위를 넘어 갔을 때 0이 된다.

Reference

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
자바의 신, 이상민 저

profile
조금씩 성장하는 개발자...!

0개의 댓글