공부/Java

[Java-02] 변수(Variable) - 진법

줭♪(´▽`) 2021. 1. 30. 23:48

1. 10진법과 2진법

- 컴퓨터는 2진수(0과 1)밖에 모르기 때문에 10진수로 입력하여도 2진수로 바뀌어 저장된다.

 

int age = 25;

보이는 것              실제 저장
age : 25   ------->  age : 11001

 

2. 비트(bit)와 바이트(byte)

- 비트(bit, binary digit) : 한 자리의 2진수

- 1비트는 컴퓨터가 값을 저장할 수 있는 최소단위

- 바이트(byte) : 1비트 8개를 묶은 데이터의 기본단위

- 워드(word) : CPU가 한 번에 처리할 수 있는 데이터의 크기 (워드의 크기는 CPU의 성능에 따라 달라짐)

 

n비트로 표현할 수 있는 10진수
값의 개수 : 2n
값의 범위 : 0 ~ 2n-1

 

3. 8진법과 16진법

- 8진수 : 2진수 3자리를 한자리로 표현 (0~7 사용)

- 16진수 : 2진수 4자리를 한자리로 표현 (0~9, A~F 사용)

 

1) 2진수 -> 8진수

 

- 2진수를 뒤에서부터 '3자리'씩 끊어서 그에 해당하는 8진수로 바꿈

ex) 1010101100(2) = 1/010/101/100 = 1/2/5/4 = 1254(8)

 

2) 2진수 -> 16진수

 

- 2진수를 뒤에서부터 '4자리'씩 끊어서 그에 해당하는 16진수로 바꿈

ex) 1010101100(2) = 10/1010/1100 = 2/A/C = 2AC(16)

 

 

4. 정수의 진법 변환

1) 10진수 -> n진수

 

- n으로 나누고 나머지 값을 옆에 적는 것을 더 이상 나눌 수 없을 때까지 반복

- 나머지를 아래부터 위로 순서대로 적음

ex) 10진수를 2진수로 변환

46(10) = 101110(2)

 

2) n진수 -> 10진수

 

- 각 자리 수에 해당 단위의 값을 곱해서 모두 더함

ex) 10진수 123

123(10) = 100 + 20 + 3

           = 1*102 + 2*101 + 3*100

ex) 2진수를 10진수로 변환

101110(2) = 1*25 + 0*24 + 1*23 + 1*22 + 1*21 + 0*20

              = 1*32 + 0*16 + 1*8 + 1*4 + 1*2 + 0*1

              = 32 + 8 + 4 + 2

              = 46(10)

 

 

5. 실수의 진법 변환

1) 10진 소수점수 -> 2진 소수점수

 

- 10진 소수점수에 2를 계속 곱함

- 소수부만 가져와 계속 2를 곱함

- 소수부가 0이 될 때까지 반복

ex) 10진수 0.625를 2진수로 변환

0.625(10) = 0.101(2)

 

2) 2진 소수점수 ->10진 소수점수

 

- 1)과 같은 방법, 2대신 10을 곱함

ex) 2진수 0.101를 10진수로 변환

0.101(2) = 0.625(10)

 

0.101(2) = 1*2-1 + 0*2-2 + 1*2-3

           = 1*0.5 + 0*0.25 + 1*0.125

           = 0.5 + 0.125

           = 0.625(10)

 

 

6. 음수의 2진 표현 - 2의 보수법

1) 2의 보수법

 

- 어떤 수의 'n의 보수' : 더했을 때 n이 되는 수

- 2

의 보수 관계에 있는 두 2진수를 더하면 (자리올림이 발생하고) 0이 됨

2진수 부호있는 10진수
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1

ex) 0101(5)과 1011(-5)는 서로 2의 보수 관계에 있음

 

2) 2의 보수 구하기

 

2의 보수 = 1의 보수 + 1

 

- 1의 보수 : 0을 1로, 1을 0으로 바꿈

ex) 0101(2)의 2의 보수를 구하여라

0101(2)의 1의 보수 : 1010(2)

1010(2) + 1 = 1011(2)

 

 

3) 음수의 2진 표현 구하기

 

- 음수의 절대값을 2진수로 변환

- 1의 보수를 구함

- 1을 더해 2의 보수를 구함

ex) -5(10)를 2진수로 변환하라

-5(10) ----> 5(10) -----> 0101(2) ----> 1010(2) ----> 1011(2)

 

 

 

참고 - Java의 정석 3rd Edition (저자 : 남궁성, 출판 : 도우출판)