본문 바로가기

프로그래밍/JAVA

[ JAVA ] 진법

1. 10진법과 2진법

  • 10진법 - 0부터 9까지의 숫자를 사용하여 나타내는 기법. 10배마다 새로운 자리로 옮겨가는 기수법이다.
  • 2진법 - 0과 1 두 종류의 숫자로 수를 나타내는 방식이다.

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

  • 비트(bit, binary digit) : 한 자리의 2진수를 비트(bit)라고 하며, 1비트는 컴퓨터가 값을 저장할 수 있는 최소단위.
                                         n비트로 표현할 수 있는 10진수 값의 개수는 2ⁿ, 값의 범위는 0 ~ 2ⁿ-1
  • 바이트(byte) : 1바이트는 1비트 8개를 묶은 단위. 데이터의 기본 단위로 사용한다.
  • 워드(word) : CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미함. 워드의 크기는 CPU의 성능에 따라 달라짐.

3. 8진법과 16진법

  • 8진수 : 0부터 7까지의 숫자를 사용하여 수를 나타내며 2진수 3자리를 한자리로 표현할 수 있음.
  • 16진수 : 숫자 0~9와 문자 A~F를 사용하여 수를 나타내며 2진수 4자리를 한자리로 표현할 수 있음.

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

4. 정수의 진법 변환

  • 10진수를 n진수로 변환 - n으로 반복해서 나눔

10진수를 n진수로 변환 예시

  • n진수를 10진수로 변환 - 각 자리의 수에 해당 단위의 값을 곱해서 모두 더함
    ① 10진수 예시
         123(10) = 1x10² + 2x10¹ + 3x1
    ② 2진수 예시
         101110(2) = 1x32 + 0x2⁴ + 1x2³ + 1x2² + 1x2¹ + 0x1 = 32 + 0 + 8 + 4 + 2 + 0 = 46(10)
    ③ 8진수 예시
         1460(8) = 1x8³ + 4x8² + 6x8¹ + 0x1 = 512 + 256 + 48 + 0 = 816(10)
    ④ 16진수 예시
         64F(16) = 6x16² + 4x16¹ + Fx1 (F는 10진수로 15이므로 15x1과 같음) = 1536 + 64 + 15 = 1615(10)

5. 실수의 진법변환

  • 10진 소수점수를 2진 소수점수로 변환하는 방법 - 10진 소수점수에 2를 계속 곱함
    ex) 10진수 0.625를 2진수로 변환하는 방법
    ① 10진 소수에 2를 곱한다. 0.625 x 2 = 1.25
    ② 위의 결과에서 소수부만 가져다가 다시 2를 곱한다. 0.25 x 2 = 0.5
    ③ ①과 ②의 과정을 소수부가 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진 소수점수로 변환하는 방법
    ex) 2진수 0.101을 10진수로 변환하는 방법
    0.101(2) = 1x2^(-1) + 0x2^(-2) + 1x2^(-3) = 1x0.5 + 0x0.25 + 1x0.125 = 0.5 + 0.125 = 0.625(10)

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

  • 2의 보수법 : 어떤 수의 'n의 보수'는 더했을 때 n이 되는 수를 말함. 2의 보수관계란 더해서 2가 되는 두 수의 관계를 말하며 10진수 2는 2진수로 '10'이다. 2진수로 '10'은 자리올림이 발생하고 0이 되는 수를 말함. 즉, 2의 보수 관계에 있는 두 2진수를 더하면 자리올림이 발생하고 0이 된다.
    '2의 보수 관계'에 있는 두 2진수로 5와 -5처럼 절대값이 값고 부호가 다른 두 10진수를 표현하는 것을 '2의 보수법'이라 라고 한다.

2의 보수 관계에 있는 두 2진수의 덧셈

  • 음수를 2진수로 표현하기
    10진 음의 정수를 2진수로 변환하려면, 먼저 10진 음의 정수의 절대값을 2진수로 변환한 다음 이 2진수의 '2의 보수'를 구하면 됨
    ex) -5(10)  ==========> 5(10) ==========> 0101(2) ==========> 1011(2)
                         ① 절대값                  ② 2진수                      ③ 2의 보수
  • 2의 보수 구하기 - 서로 '2의 보수'의 관계에 있는 두 수를 더하면 '0(자리올림 발생)'이 된다.

2의 보수 구하는 방법

      - '1의 보수' 구하는 방법 : 0을 1로, 1을 0으로 변경

  • 왜 '1의 보수 + 1'은 '2의 보수'인가?
    ① 어떤 2진수가 있을 때, 이 2진수의 1의 보수를 더하면 모든 자리가 1이 된다.
    ex) 0101 + 1010 ('0101'의 1의 보수) = 1111
    ② 양변에 1을 더하면 우변은 0이 된다. 올림이 발생하지만 4비트를 넘는 값이라 저장할 공간이 없어서 버려진다.
    ex) 0101 + (1010 + 1) = 1111 + 1 = 10000
                    (1의 보수 +1)
    ∴ 1의 보수 + 1을 하면 0이 되므로 '1의 보수 +1' = '2의 보수'

'프로그래밍 > JAVA' 카테고리의 다른 글

[ JAVA ] 오버라이딩(overriding)  (0) 2022.10.09
[ JAVA ] 상속(inheritance)  (0) 2022.10.09
[ JAVA ] 자바의 형변환  (0) 2022.10.08
[ JAVA ] 변수와 메서드  (0) 2022.09.20
[ JAVA ] 기본형  (0) 2022.08.27