자바프로그램은 완전한 기계어가 아닌 중간 단계의 바이트 코드이기 때문에 이것을 해석하고 실행할 수 있는 가상의 운영체제가 중요하다. 이것이 JVM이다. 운영체제와 자바 프로그램을 중계하는 JVM을 통해 자바 프로그램이 여러 운영체제에서 동일한 실행 결과가 나오도록 설계했다.
사용자가 .java파일(소스파일)을 만들면 컴파일러(javac.exe)로 컴파일 한다. 확장자가 .class인 바이트 코드 파일이 만들어진다. 바이트 코드 파일은 (java.exe)에 의해서 JVM에서 해석되고 해당 운영체제에 맞게 기계어로 번역된다.
자바는 ‘한번 작성하면 어디
서든 실행된다’라는 장점을 가지고 있지만 두가지 단계(1. class로 컴파일 2. JVM을 통해 기계어로 번역)를 거쳐야만이 실행되기 때문에 C, C++의 컴파일 단계에서 만들어지는 완전한 기계어보다 속도가 느리다는 단점이 있다.
1의 보수는 음수를 사용하기 위해 처음 만들어졌다.
+3 : 0000 0011
-3 : 1111 1100
그런데 이렇게 사용하게 되면 0이 2개 존재하게 된다.
+0 : 0000 0000
-0 : 1111 1111
이 문제를 해결하고 음수를 표현하기 위해서 2의 보수가 사용된다.
그래서 1111 1111은 0이 아니고 -1이 된다.
그래서 1byte(8bit)가 표현할 수 있는 숫자의 범위는 -128 ~ 127이다.
0111 1111 ~ 1000 000 : 127 ~ -128
컴퓨터는 뺄셈 로직이 없기때문에 뺄셈을 하기 위해서는 2의 보수를 사용해야한다. 2의 보수가 음수를 표현할 수 있기 때문에!
3 - 3을 사용하기 위해서는 3 + (-3)을 해야한다.
0000 0011 + 1111 1101 = (1) 0000 0000 = 0
(1) 9 - 7
-7은 7의 2의 보수
7 : 0000 0111
-7 : 1의 보수 + 1 = 1111 1000 + 1 = 1111 1001
9 : 0000 1001
-7 : 1111 1001
⇒ 0000 0010 = 2
(2) 13 - 6
13 : 0000 1101
-6 : 1111 1010
⇒ 0000 0111 = 7