> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/java/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/java/ch2/primitive-type-and-range.md).

# Primitive type and range

&#x20; (참고) 1byte = 8 bits

| Type \ Size(Byte) | 1       | 2     | 4     | 8      |
| ----------------- | ------- | ----- | ----- | ------ |
| 논리형               | boolean |       |       |        |
| 문자형               |         | char  |       |        |
| 정수형               | byte    | short | int   | long   |
| 실수형               |         |       | float | double |

(설명) int를 기준으로 작은 게 short, 큰 게 long이다.

double은 float보다 정밀도가 2배이기 때문에 double이라고 명명된다고 한다.

정수형은 int형이 default이고, 실수형은 double형이 default이다.

1. **표현범위1**

n 비트로 표현할 수 있는 값의 갯수 : 2^n 개. (부호 유무에 따라 값의 범위가 달라진다!⭐️)

각 데이터 타입만 알면 아래와 같은 공식으로 표현 범위를 알 수 있기 때문에 외우지 않아도 된다.

n 비트로 표현할 수 있는 부호없는 정수의 범위 : 양수 - 1 \~ 2^n, 0 - (2^n)-1&#x20;

n 비트로 표현할 수 있는 부호있는 정수의 범위 : -2^(n-1) \~ 2(n-1)-1

\=>양수와 음수 둘 다 표현한디. 표현할 수 있는 범위의 절반을 음수표현에 사용한다.&#x20;

ex)부호있는 정수(2^n개):  n = 8, -2^7 \~ 2^7-1.=> \[-128, 127]

부호없는 정수(2^n개): n=8, \[0, 255]

byte형 : 1byte크기 = 8bits = 2^8 = 256.

2\. **표현범위2**

**자바에서는 정수형과 실수형에는 부호를 나타내는 비트(부호비트)가 있다.**

ex) short : 2byte = 16bits. 1bit 부호비트 + 15 bits. 값의 표현 범위 : -2^15 \~ 2^15-1. (2^15  = 32768) => -32768 - 32767

char : 문자코드를 저장하기 때문에 부호 비트가 없다. char : 2byte = 16bits. 0 \~ (2^16) -1 = 0 - 65535

int : 4byte = 32bits, 1 부호비트 + 31bits. 값의 표현 범위 : -2^31 \~ 2^31-1(2^31 = 약 20억) => -20억 - 20억.

long : 8bytes = 64bits, 1 부호비트 + 63bits. 값의 표현 범위 : -2^63 \~ 2^64 - 1.(8\*10^18 = 약 800경) => -800 부터 800경

3\. **표현범위3**

| Type   | 저장 가능한 값의 범위(양수)                                                               | 정밀도  | 크기              |
| ------ | ------------------------------------------------------------------------------ | ---- | --------------- |
| float  | <p>1.4E-45 \~ 3.4E38</p><p>음수 : <strong>-</strong>3.4x10^38 \~ -1.4^10^-45</p> | 7자리  | 4bytes(=32bits) |
| double | <p>4.9E-324 \~ 1.8E308</p><p>음수 : -1.8E308 \~ -4.9E-324</p>                    | 15자리 | 8bytes(=64bits) |

float의 표현할 수 없는 범위 : -1.4X10^-45 \~ 1.4X10^-45

S(1) + E(8) + M(23) : 부호 비트1 + 지수비트8 + 가수비트23

float의 정밀도 : 가수비트 23bit는 정규화를 통해 24bit까지 가능하다.->2^24->10^7 < 2^24 < 10^8 이기 때문에 정밀도가 7이 된다.

double : float의 정밀도의 2배.

S(1) + E(11) + M(52) : 부호 비트1 + 지수비트11 + 가수비트52

double의 정밀도 : 마찬가지로, 정규화를 통해 53bit까지 가능하다면 2^53=약 (2^24)^2 = (10^7)^2 < 2^48 < (10^8)2 => 10^14 < 2^48 < 10^16 이 되므로 정밀도가 15 정도 된다.
