[Chapter 2] 변수 (Variable)_3

slchoi·2022년 1월 4일
0

자바의 정석

목록 보기
5/19
post-thumbnail

'자바의 정석 3rd Edition'을 공부하며 정리한 내용입니다.

3. 진법


3.1 10진법과 2진법

  • 1946년 개발된 컴퓨터인 에니악(ENIAC)은 10진법을 사용하도록 설계되었으나 전기회로는 전압이 불안정해서 접압을 10단계로 나누어 처리하는 데 한계가 있었음
  • 1950년에 개발된 에드박(EDVAC)은 단 두 가지 단계, 전기가 흐르면 1, 흐르지 않으면 0만으로 동작하도록 설계
  • 2진법은 0과 1로만 데이터를 표현하기 때문에 10진법에 비해 많은 자리수를 필요로 함
  • 자리수가 많아지긴 해도 2진수는 10진수를 온전히 표현할 수 있고 덧셈이나 뺄셈 같은 연산도 10진수와 동일

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

'bit' vs 'byte' vs 'word'

  • bit: 한 자리의 2진수. 1bit는 컴퓨터가 값을 저장할 수 있는 최소 단위
  • byte: 1bit 8개를 묶은 단위. 데이터의 기본 단위로 사용
  • word: CPU가 한 번에 처리할 수 있는 데이터의 크기. 크기는 CPU의 성능에 따라 달라짐
    • 32bit CPU에서 1word는 32bit(4byte)이고, 64bit CPU에서는 64bit(8byte)
  • n bit로 2n2^n개의 값을 표현할 수 있음
    • n bit로 10진수를 표현한다면, 표현 가능한 10진수의 범위는 00 ~ 2n12^n-1

3.3 8진법과 16진법

  • 2진법은 0, 1 두개의 기호만으로 값을 표현하기 때문에, 2진법으로 값을 표현할 경우 자리수가 길어진다는 단점이 있음. 단점을 보완하기 위해 2진법 대신 8진법이나 16진법을 많이 사용
  • 8진수는 2진수 3자리를, 16진수는 2진수 4자리를 각각 한자리로 표현할 수 있기 때문에 자리수가 짧아져 알아보기 쉽고 서로 간의 변환벙법도 간단
    • 8진법은 값을 표현하는데 8개의 기호가 필요하므로 0~7의 숫자를 기호로 사용
    • 16진법은 16개의 기호가 필요한데 0~9의 숫자만으로는 부족하므로 6개의 문자(A~F)를 추가로 사용

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

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

3.5 실수의 진법 변환

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

  • 10진 소수점수에 2를 계속 곱함
  • 과정
    1. 10진 소수에 2를 곱함
    2. 위의 결과에서 소수부만 가져와 다시 2를 곱함
    3. 1, 2번 과정을 소수부가 0이 될 때까지 반복 => 소수가 0이 되지 않고 무한히 반복될 수도 있음
    4. 위의 결과에서 정수부만을 위에서 아래로 순서대로 적고 '0.'을 앞에 붙이기

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

  • 자리수에 맞춰 2^(-1), 2^(-2),...를 곱해줌

cf) 정수부가 있는 소수점수는 정수부와 소수점부를 따로 변환한 다음에 더하면 됨

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

  • 4비트의 2진수로 양수, 음수를 모두 표현하기 위해 MSB(왼쪽의 첫 번째 비트)가 0이면 양수, 1이면 음수 표현을 사용
  • '2의 보수법'에 의해 음수를 배치하면, 절댓값이 같은 양수와 음수를 더했을 때 2진수로도 0을 결과로 얻으므로 부호를 신경쓰지 않고 덧셈 가능

1. 2의 보수법

  • n의 보수: 더했을 때 n이 되는 수
    • 7의 '10의 보수'는 3이고, 3의 '10의 보수'는 7 => 3과 7은 '10의 보수의 관계'
  • 2의 보수 관계: 더해서 2가 되는 두 수의 관계
    • 10진수 2는 2진수로 '10'
    • 2진수로 '10': 자리올림이 발생하고 0이 되는 수를 의미
    • '2의 보수 관계'에 있는 두 2진수를 더하면 '(자리올림이 발생하고) 0이 됨'

      사진 출처: 자바의 정석 3rd Edition p.52

    • 2진수 '0101', '1011'은 서로 '2의 보수 관계'. 두 2진수를 더하면 0이 됨
      • 이 덧셈이 10진수로도 0이 되려면, 2진수 '0101'가 10진수로 5이므로 2진수 1011'은 10진수로 -5여야 함
  • 2의 보수법: 2의 보수 관계에 있는 두 2진수로 절대값이 같고 부호가 다른 두 10진수를 표현하는 것

2. 음수를 2진수로 표현하기

  • 10진 음의 정수의 절대값을 2진수로 변환한 후 '2의 보수'를 구하면 됨

3. 2의 보수 구하기

  • 2의 보수 = 1의 보수 + 1
    • 1의 보수: 0을 1로, 1을 0으로 바꾼 것

4. 음수의 2진 표현 구하는 방법 정리
1. 음수의 절대값을 2진수로 변환
2. 1번에서 구한 2진수의 1을 0으로 0은 1로 바꾸기 (1의 보수 구하기)
3. 2번의 결과에 1을 더함 (2의 보수 구하기, 1의 보수 + 1)

profile
예비 백엔드 개발자

0개의 댓글