int형도 32비트도 float형도 32비트인데 왜 값의 범위가 다를까?
그건 실수형의 저장방식 때문이다.
전 글에서 서술했듯이 실수형은
부호 지수 가수로 나뉜다.
계산 방식
5.5면 101.1인데 (정수 5는 101 이고 소수점 0.5는 0.1이됨)
실수형 계산을 위해 정규화(정수부분에 1만 남기는것) 을 하면 1.011이되고 두번 소수점을 옮겼음으로 1.011 * 2^2가 된다.
여기서 부호는 0 지수는 2 가수는 1.011인데 지수부분에는 bias(지수가 음수가 되는것을 막기위한)로 127을 더해줘서
부호는 0 지수는 1000 0001 가수는 1011 00000 나머지 비트자리는 0 가된다.
float의 범위인 지수부분이 8비트중에서 사용할수 있는것이 1~254인데 이를 양수 음수로 나누면 -126 ~ 127까지 사용할 수 있고 이를 10진수로 하면 2^-126 = 1.17 * 10^-38
2^127 = 1.17 * 10^38
이다.
'IT 관련 > JAVA' 카테고리의 다른 글
자바 printf 와 Scanner (0) | 2022.05.19 |
---|---|
자바 상수,리터럴 ( constant , literal) (0) | 2022.05.17 |
Java 변수의 타입 (0) | 2022.04.17 |
Java의 변수 (0) | 2022.04.17 |
자바(JAVA)란? (0) | 2022.04.08 |