[계산] public class Double { public static void main(String[] args) { double num1, num2; // 두 개의 변수 동시 선언 double result; num1 = 1.0000001; num2 = 2.0000001; result = num1 + num2; System.out.println(result); } }
[결과값] 3.0000001999999997 ⇒기대하는 값 3.0000002가 출력되지 않았다. 이유는 실수 표현에 오차가 존재하기 때문이다. 처음과 끝 수를 정해놓고, 소숫점 자리는 근사값의 표현이 저장된다. *0.1과 0.2 사이에 있는 숫자는 무한대로 많음. *부동 소숫점 방식 & 고정 소숫점 방식
십진수 25를 이진수로 표현
0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
---|
25/2=12...1
12/2=6...0
6/2=3...0
3/2=1...1
위에서 아래로 읽기⤴
[5 양의 정수 표현]
0 0 0 0 0 1 0 1 [5 음의 정수 표현]
1 0 0 0 0 1 0 1
2의 보수법
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
---|
↓ 1의 보수(0은 1로, 1은 0으로 변경)
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
---|
↓ 또 1을 더함
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
---|
⇓ 5의 정수와 2의 보수값을 더함
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
---|
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
---|
=
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---|
[계산] public class Variable { public static void main(String[] args) { short num1 = 11; short num2 = 22; short result = num1 + num2; System.out.println(result); } }
[결과값] 오류로 인해 결과가 나오지 않는다. [이유] *short는 16bit인데, 연산한 결과값은 무조건 int 이상(32bit)으로 돌려주기 때문에 오류가 뜬다. 1. 메모리에 있는 num1, num2 값을 연산을 위해 CPU에 보냄 2. result 연산을 CPU에서 32bit로 계산 후 32bit로 돌려준다. ⇒ JVM이 32bit 시스템
[TIP] 32bit와 64bit의 차이 ⇒CPU와 RAM을 이어주는 코드 선이 32개 / 64개 ⇒RAM을 인식할 수 있는 크기가 다르다 32bit는 4기가가 최대, 2³² 64bit는 256기가가 최대, 2⁶⁴
[상기 계산을 정상적으로 동작하려면] public class Variable { public static void main(String[] args) { short num1 = 11; short num2 = 22; int result = num1 + num2; System.out.println(result); } }
[결과값] 33 *short를 전부 int로 변경하거나, result만 int로 변경하는 방법이 있다.
・아스키코드 : ASCII (American Standard Code for Information Interchange
ex)A=65 / B=66
・유니코드 :
문자가 출력되는 원리 : 숫자와 문자의 1 : 1 매칭