Java

[자바의 정석] #CH.2 변수 Variable - 2.3 진법

소댓 2023. 1. 17. 23:16

3. 진법

3.1 10진법과 2진법

 

- 사람은 일상 생활에서 주로 10진법을 사용하지만, 컴퓨터는 2진법을 사용함

- 전기가 흐르면 1, 흐르지 않으면 0 만으로 동작하도록 설계된 전기 회로에 2진법이 적합함

- 2진법은 0과 1로만 데이터를 표현하기 때문에 10진법에 비해 많은 자리수를 필요로 함

 

int age = 25; // 변수에 25를 저장

age 25 → age 11001

 

 

3.2 비트(bit)와 바이트(byte)

 

- 비트(bit) : 한 자리의 2진수로, 컴퓨터가 값을 저장할 수 있는 최소 단위 (binary digit)

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

- 워드(word) : CPU가 한 번에 처리할 수 있는 데이터의 크기 (=4byte)

 

* n비트로 표현할 수 있는 10진수

- 값의 개수 : 2^n

- 값의 범위 : 0 ~ 2^n -1

> ex. 10진수 2자리로 표현할 수 있는 값의 범위는 0~10^2 -1 즉, 0~99가 된다.

 

 

3.3 8진법과 16진법

 

- 자리수가 상당히 길어진다는 2진수의 단점을 보완하기 위해, 2진법 대신 8진법과 16진법을 사용하기도 함

- 8진수는 2진수 3자리를, 16진수는 2진수 4자리를 각각 한자리로 표현할 수 있음

> 자리수가 짧아져서 알아보기 쉽고 서로 간의 변환방법 또한 매우 간단함

 

* 2, 8, 10, 16진법에 사용되는 기호

- 2진법 : 0~1(2개)

- 8진법 : 0~7(8개)

- 10진법 : 0~9(10개)

- 16진법 : 0~9와 A~F(16개)

 

* 2진수를 8진수, 16진수로 변환

- 2진수를 8진수로 변환 : 2진수를 뒤에서부터 3자리씩 끊어서 그에 해당하는 8진수로 변환

- 2진수를 16진수로 변환 : 2진수를 뒤에서부터 4자리씩 끊어서 그에 해당하는 16진수로 변환

> ex. 1010101100(2진수)

= 1254(8진수) > 1/010/101/100

= 2AC(16진수) > 10/1010/1100

 

 

3.4 정수의 진법변환

 

* 10진수를 n진수로 변환

- 해당 진수로 나누고 나머지 값을 옆에 적는 것을 더 이상 나눌 수 없을 때까지 반복한 다음,

  나머지 값을 더 이상 나눌 수 없을 때까지 반복한 다음 마지막 몫과 나머지를 아래부터 위로 순서대로 적음

 

* n진수를 10진수로 변환

- 각 자리의 수에 해당 단위의 값을 모두 곱해서 더하면 된다. 

> 123(10진수) = 100 + 20 + 3

   = 1x100 + 2x10 + 3x1

   = 1x10^2 + 2x10^1 + 3x10^0

> 101110(2진수) = 1x2^5 + 0x2^4 + 1x2^3 + 1x2^2 + 1x2^1 + 0x2^0

   = 32+8+4+2 = 46(10진수)

> 1460(8진수) = 1x8^3 + 4x8^2 + 6x8^1 + 0x8^0

   = 512 + 256 + 48 + 0 = 816(10진수)

> 64F(16진수) = 6x16^2 + 4x16^1 + 15x16^0

   = 1536 + 62 + 15 = 1615(10진수)

 

 

3.5 실수의 진법변환

 

* 10진 소수점수를 2진 소수점수로 변환하는 방법

① 10진 소수에 2를 곱한다.

> 0.625  x 2 = 1.25

② 위의 결과에서 소수부만 가져다가 다시 2를 곱한다.

> 0.25 x 2 = 0.5

③ ①과 ②의 과정을 소수부가 0이 될 때까지 반복한다.

> 0.5 x 2 = 1.0

ⓞ 위의 결과에서 정수부만을 위에서 아래로 순서대로 적고 '0.'을 앞에 붙이면 된다.

  0.625  x 2 = 1.25

  0.25 x 2 = 0.5

  0.5 x 2 = 1.0

>> 0.625(10진수) → 0.101(2진수)

 

* 2진 소수점수를 10진 소수점수로 변환하는 방법

0.101(2진수) = 1x2^-1 + 0x2^-2 + 1x2^-3

= 1x0.5 + 0x0.25 + 1x0.125

= 0.5+0.125 = 0.625(10진수)

> 정수부가 있는 소수점수는 정수부 123과 소수점부 0.456을 따로 변환한 다음에 더한다.

 

 

3.6 음수의 2진 표현 - 2의 보수법

 

* 음수의 2진 표현을 구하는 방법

① 음수의 절대값을 2진수로 변환한다.

: -5의 절대값인 5를 2진수로 변환한다. 10진수 5를 2진수로 변환하면 '0101'이다.

② ①에서 구한 2진수의 1을 0으로 0은 1로 바꾼다. (1의 보수 구하기)

: '0101'이 '1010'이 된다.

②의 결과에 1을 더한다. (2의 보수 구하기, 1의 보수 +1)

: '1010'에 1을 더하면 '1011'이 되고, 이것이 -5의 2진 표현이다.