변수
값이 변할 수 있는 데이터 공간
- 관례에 따라 camelCase 적용
변수 선언
int a;
데이터타입 변수명;
변수 초기화
int a = 1;
데이터타입 변수명 = 원하는 값;
변수 재할당
int a = 1;
a = 2;
변수명 = 원하는 값;
데이터 타입
데이터 형태와 데이터 공간 크기 등으로 나누어짐
`byte` | `short` | `int` | `long` | `float` | `double` | `char` | `boolean` | |
크기 | 1byte | 2byte | 4byte | 8byte | 4byte | 8byte | 2byte | 1bit |
범위 | `-128` ~ `127` | `-32,768` ~ `32,767` | `-2,147,483,648` ~ `2,147,483,647` | `-9,223,372,036,854,775,808` ~ `9,223,372,036,854,775,807` | `±1.4E-45` ~ `±3.4E38` (소수점 이하 7자리까지 정확도) | `±4.9E-324` ~ `±1.8E308` (소수점 이하 15자리까지 정확도) | `0` ~ `65,535` (유니코드 문자) | `true` 또는 `false` |
용도 | 매우 작은 정수 | 작은 정수 | 일반적인 정수 | 20억이 넘어가는 정수 | 정확도가 덜 중요한 실수 | 정확도가 중요한 실수 | 단일 문자 | 논리 값 |
부동소수점
컴퓨터에서 큰 실수 값을 표현하기 위한 방법
- 정수와 소수값에 상관없이 가수부 내에서 전체 실수를 표현
- 공간 낭비 문제 해결
- 메모리와 처리 속도 효율성 높음
- 정밀도 문제 있음
- `오버플로우`, `언더플로우` 발생할 수 있음
1.xxx * 2^n
부호 비트
숫자의 부호를 나타냄 (1bit)
- 0이면 양수 1이면 음수
지수
소수점의 위치를 가리키는 2의 제곱승 (8bit)
가수
실제 실수 데이터 비트 (23bit)
지수 표기법
큰 숫자나 작은 숫자를 간단하게 표기하는 방식
double num1 = 3.0e6;
double num2 = 4.5e-7;
실수en = 실수 * 10^n
계산 방법
- 음수면 1, 양수면 0을 부호 비트에 넣는다.
- 절대값을 이진수로 변환한다.
- 소수점을 이동시켜 정수를 한자리로 변환한다. (정규화)
- 가수부 비트에 실수값을 넣는다.
- 지수에 `bias`값 127을 더하고 이진수로 변환하여 지수부에 넣는다.
오버플로우
변수에 저장할 수 있는 값의 범위를 넘어서는 값을 대입할 때 발생
- 값이 최소값으로 되돌아감
언더플로우
변수에 저장할 수 있는 값의 하한선을 넘어서려 할 때 발생
- 값이 최대값으로 되돌아감
정규화
소수점을 이동시키는 것
지수에 bias값을 더하는 이유
가장 큰 이유는 음수 지수를 양수 비트로 표현하기 위해서이다. 지수에 bias값(127)을 더하면 8자리 비트로 표현 가능하고 0~127은 음수 128~255는 양수를 표현 할 수 있다.
배정도 부동소수점
위의 부동소수점 방식은 단정도 부동소수점 방식을 나타낸다. 단정도 부동소수점 방식은 대표적인 예시로 float형을 들 수 있다. 배정도 부동소수점 방식은 double형을 예로 들 수 있는데, 부호 비트는 1비트, 지수 비트 11비트, 가수 비트 52비트이다. bias값은 1023으로 고정되어 있다. 단정도 부동소수점 방식은 정밀도가 7자리이며 메모리 사용이 배정도 부동소수점 방식에 비해 적지만, 배정도 부동소수점은 15~16자리로 더 정확하고 범위가 넓다.
참고 사이트
☕ 실수 표현(부동 소수점) 원리 한눈에 이해하기
실수의 2진수 표현 10진수의 정수를 2진수의 정수로 변환할 수 있듯이, 10진수의 소수를 2진수의 소수로 변환할 수 있다. 예를들어 10진수 11.765625 를 2진수 소수로 변환하는 방법은 다음과 같다. 먼
inpa.tistory.com
'Java > 기본' 카테고리의 다른 글
[Java / 기본] 비교, 논리 연산 (0) | 2024.12.18 |
---|---|
[Java / 기본] 산술 연산자 (0) | 2024.12.18 |
[Java / 기본] 클래스 구조 (0) | 2024.12.18 |
[Java / 기본] 프로젝트 생성 및 Github 연동 (0) | 2024.12.17 |
[Java / 기본] Java 개발 환경 세팅 (0) | 2024.12.17 |