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진 표현이다.
'Java' 카테고리의 다른 글
| [자바의 정석] #CH.2 변수 Variable - 2.5 형변환 (0) | 2023.01.18 |
|---|---|
| [자바의 정석] #CH.2 변수 Variable - 2.4 기본형(primitive type) (0) | 2023.01.18 |
| [자바의 정석] #CH.2 변수 Variable - 2.2 변수의 타입 (0) | 2023.01.16 |
| [자바의 정석] #CH.2 변수 Variable - 2.1 변수와 상수 (0) | 2023.01.12 |
| [자바의 정석] #CH.1 자바를 시작하기 전에 (1) | 2023.01.12 |