보편적인 2진수의 곱셈, 2진수의 나눗셈, BCD(Binary-Coded Decimal)

보편적인 2진수의 곱셈

img_84.png

10진수랑 똑같은 방식으로 곱셈

  • 10진수로 변환해서 곱하고 2진수로 변환하는게 빠를걸?

img_85.png

10진수로 변환해서 부호 고려해서 곱하고, 2진수로 변환

2진수의 나눗셈

img_86.png

으로 나누는 것은 right shift

일반적인 2진수 나눗셈은 10진수로 변환해서 몫과 나머지 구하기

BCD(binary-coded decimal)

img_87.png

바이너리로 인코딩한 십진수

img_88.png

10진수의 각 자리(0~9)를 4비트를 이용해 비트 패턴으로 표현

  • 중에 10개만 사용

unpacked:

  • 10진수 한 자리가 1바이트를 사용
    • 1바이트 중에서 4비트 사용
    • 4비트에서도 6개 값은 나올 수 없음 packed:
  • 10진수 두 자리가 1바이트를 사용

BCD 음수

img_89.png

packed BCD를 가정

  • 가장 오른쪽 비트 포함 4비트를 부호를 위해 사용
    • 위 예에서는 1100이 양수, 1101이 음수라고 미리 약속

img_90.png

비트 낭비

가산기 회로에서 바로 처리할 수 없음

  • 추가적인 로직 필요
  • 추가적인 로직이 필요하니 속도도 느려짐

정수의 정확도

img_91.png

정수는 100% 정확도

  • 표현할 수 있는 범위 안의 정수는 오차 없이 정확

복습 퀴즈

(Q1) 다음 2진수들을 곱한 결과는 무엇인가요? 1010(2) * 1100(2) (부호없음)

  • 10진수로 피연산자를 변환
  • 120을 2진수로 변환

(Q2) 다음 2진수들을 곱한 결과는 무엇인가요? 1001(2) * 1011(2) (부호 있음. 2의 보수 사용)

  • 10진수로 피연산자를 변환
  • 부호 비트가 1이라서 음수
  • 각 피연산자의 2의보수를 구하면
  • ,
  • 양수임을 표현하기 위해 가장 왼쪽에 0을 붙여주면

(Q3) 다음 2진수들을 나눈 결과는 무엇인가요? 1111(2) / 0011(2) (부호없음)

  • 10진수로 피연산자를 변환
  • 15 / 3
  • 몫은 5, 나머지 0
  • 5를 2진수로 변환하면
  • 양수임을 표현하기 위해 가장 왼쪽에 0을 붙이면

(Q4) 다음 2진수들을 나눈 결과는 무엇인가요? 1100(2) / 1110(2) (부호 있음. 2의 보수 사용)

  • 10진수로 피연산자를 변환
  • 부호 비트가 1이라서 음수
  • 각 피연산자의 2의보수를 구하면
  • ,
  • 2
  • 2을 2진수로 변환하면
  • 양수임을 표현하기 위해 가장 왼쪽에 0을 붙이면

0건의 항목