2진수의 곱셈과 나눗셈에 관한 질문입니다. 도와주세여~

gyxor의 이미지

2진수의 덧셈과 뺄셈은 간단한데요

곱셈의 경우에

01010 에 2를 곱한다고 하면

10100 으로 shift 1칸만 하면 되니까요 쉬운데요

3이나 5등 홀수를 곱해야 할때는 컴퓨터 내부적으로 어떤

방식으로 계산을 하게되는지 궁금합니다.

마찬가지로 나눗셈의 경우

짝수를 제외하고

홀수를 나누었을때..

어셈에서는 DIV 명령어로 몫과 나머지를 구하는데요

내부원리가 궁금합니다.

자세한 답변부탁드립니다.

익명 사용자의 이미지

CPU가 내부적으로 어떻게 하는지 저도 모르지만 이런 곱셈방법이 있습니다.

예를 들어서 x값에 5를 곱한다고 하죠.

5를 이진수로 0101b 가 되겠군요.

여기서 1을 하나씩만 취해서 각각 이진수로 나열하면

0100b, 0001b

첫번째수 은 1이 왼쪽으로 :!: 2번, 두번째 수는 :!: 0번이군요.

이렇게 나오죠? 이제 곱셈이 아닌 쉬프트만으로 이를 계산할수 있게 됩니다.

(x << :!: 2) + (x << :!: 0) = "x * 5 를 한 결과와 같은 수"

이렇게 되죠.

검산해볼까요?

x를 4라고 합시다.

(4 * 5) = (4 << 2) + (4 << 0) = 16 + 4 = 20.

맞죠? 곱셈보다 쉬프트가 빠르다는 이유 하나만으로 이것은

유용한 계산법이 되겠네요.

나누기는 쉬프트 반전해서 하는거 뻔하고... 나머지는 AND하면 되는거고...

아마도 CPU logic은 피연산자를 rol해가면서 비트 1을 만나면 이처럼
계산할지도 모른다는 생각을 저는 굳게 믿고 있습니다.

익명 사용자의 이미지

leal (%eax,%eax,4),%ebx 이렇게 하면 %ebx = %eax *5가 됩니다. 실제로는 %ebx = %eax + %eax * 4지만요. leal 명령은 1 클럭 싸이클에 불과하므로 간단한 홀수 곱셈을 매우 빠르게 할 수 있습니다.

batmi의 이미지

minzkn wrote:

나누기는 쉬프트 반전해서 하는거 뻔하고... 나머지는 AND하면 되는거고...

위에 곱하기는 정말 신기하게도 되는군요..^__________^;
나누기도 간단하게 서식을 써줄수 없나요??
위 말을 제가 이해를 잘 못하겠어요....^_^

꼬리: 좋은 내용 감사합니다.^^;

.
마음을 가꾸는 방법은??

bugiii의 이미지

곱하기는 있는데 나누기 없는 CPU도 있는데 (곱하기 없는 것도 있구요...), 이런 것은 곱하기로 하는 경우가 있었던 기억이 있습니다. 나누기가 곱하기보다는 좀 더 비싸다고 알고 있습니다...

vacancy의 이미지

Computer Architecture 책을 보시면 확실히 아실수 있을겁니다. ;;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.