2진수 나눗셈 코드

julley123의 이미지

#include
#include

int a,b;
int booth(int a,int b); //booth 알고리즘을 이용한 곱셈 함수입니다.
void binary(int number); //십진수를 2진수로 출력 하는 함수입니다.
printf("\n");

printf("곱셈을 하시오\n");
printf("피승수 숫자를 입력하세요. (-8 ~ 7) : ");
scanf("%d", &a);
printf("승수 숫자를 입력하세요. (-8 ~ 7) : ");
scanf("%d", &b);
printf("피승수 는 %d 입니다.\n",a);
printf("승수 는 %d 입니다.\n",b);
if((a>8||a<-8)||(b>8||b<-8)) //값의 범위를 벗어나는경우 종료합니다.
{
printf("입력값오류\n");
exit(0);
}
printf("피승수의 바이너리값\n");
binary(a);
printf("\n");
printf("승수의 바이너리값\n");
binary(b);
printf("\n");
if(b<0){ //b가 음수인경우 앞부분비트들 때문에 값이 정확하게 나오지 않게 됩니다.
b=b+16; //따라서 앞부분비트들을 0으로 만듭니다.
}
booth(a,b); //booth 함수 호출합니다.
printf("\n");
}

void binary(int number)
{
int j, bit;
unsigned int maskbit=0x80; //마스크 비트를 정합니다.
printf(" 십진수 %d 는 ", number);
for(j=1; j<=8; j++) {
bit=(maskbit & number)? 1:0; //마스크 비트와 들어온 숫자와 연산을 하여 1이 //나 0을 찍습니다.
printf("%d",bit);
if((j%4)==0) printf(" ");
maskbit = maskbit>>1; //찍은 다음 당연히 한칸씩 밀어줍니다.
}
}

int booth(int a,int b)
{
int i, q_1=0, q_0, A = 0, buf, M, Q; //각각 레지스터와 초기값을 설정합니다. // 여기에 이미 i가 선언되어 있네요..
M=a<<4; //A의 값을 저장합니다. 단 booth 알고리즘에서 더하는 위치가 기 //존비트의 4번째 앞에서 더하는 연산이므로 편의상 4칸 쉬프트합니다.
Q=b; //b 값을 저장하는 레지스터입니다.
if(((b & 0x01) ? 1 : 0) == 1){ //b의 1번째 비트가 1인경우
q_0 = 1;//1이면 (Q-0)을 1로 정합니다.
}else q_0 =0;//0이면 (Q-0)을 0로 정합니다.
A=A+Q;
printf("(Q-1) (계수)");

for(/*int */i=4; i>0; i--/*;*/){ // 여기서 다시 i를 정의하면 밖에 선언된 i랑 관계가 없어집니다. 세미콜론 없어야 되고요
if(q_0==1 && q_1==0) //(Q-0,Q-1) = (1,0) 인경우입니다.
{
buf=0;
printf("\n(Q-0,Q-1) = (1,0) 이므로 A로부터 피승수를 뺀다.(보수를 취해 더한다.)\n");
buf=(~a)+1; //2의보수화 과정입니다.
buf=buf<<4; //4칸 앞의 비트에 더하는 것이므로 4칸 쉬프트 합니다.
A=A+buf;
printf("(A Q) : ");
binary(A);
printf("%d %d ",q_1,i);
}
else if(q_0 == 0 && q_1 == 1){//(Q-0,Q-1) = (0,1) 인경우입니다.
printf("\n(Q-0,Q-1) = (0,1) 이므로 A로부터 피승수를 더한다.\n");
A = A + M; // A에 피승수를 더합니다.
printf("(A Q) : ");
binary(A);
printf("%d %d ",q_1,i);
}

else if(q_1 == q_0){//(Q-0,Q-1)이 같은경우입니다.
printf("\n(Q-0,Q-1) 같으므로 산술적 우측 쉬프트만한다.\n");
printf("(A Q) : ");
binary(A);
printf("%d %d ",q_1,i);
}
q_1=q_0; // 한칸 쉬프트 하기전에 Q-1 값에 Q-0값을 저장합니다.
A =A>>1; //산술적 우측쉬프트
if(((A & 0x01) ? 1 : 0) == 1){ //마찬가지로 비트를 검사하여 1인 경우 //0인경우 Q-1에 값을 정합니다.
q_0 = 1;
}
else q_0 =0;
}
printf("\n계산종료\n");
printf("(A Q) : ");
binary(A);
printf("%d%d ",q_1,i);
printf("\n결과는 %d 입니다.",A);
printf("\n--------------------------------------------------------------------------------");

이렇게 부호있는 2진 곱셈 알고리즘은 출력했는데 부호있는 나눗셈 2진 알고리즘을 출력을 하려면 어떻게 해야하나요??

shint의 이미지


계산기 (공학용) dec. bin - byte 로 확인

- Shift로 제곱 만큼 이동하는 방법
10*4
4 == 2^2승(제곱)
10<<2 곱하기
10>>2 나누기

- 2진수를 그대로 나눠서 사용하는 방법

____101
___-----
10 1010
___10
___10
_____10

//--------------
이진수 나눗셈 코드
http://kldp.org/node/153699

이진수 나눗셈
http://kin.naver.com/qna/detail.nhn?d1id=11&dirId=1113&docId=181009273&qb=7J207KeE7IiYIOuCmOuIl+yFiA==&enc=utf8&section=kin&rank=2&search_sort=0&spq=0
http://kin.naver.com/qna/detail.nhn?d1id=11&dirId=1113&docId=228612604&qb=7J207KeE7IiYIOuCmOuIl+yFiA==&enc=utf8&section=kin&rank=1&search_sort=0&spq=0

이진수의 나눗셈 연산
http://blog.naver.com/canuvis2002?Redirect=Log&logNo=50015083175

[풀어쓰는 C언어 강의] 쉬프트 연산자를 이용한 곱셈, 나눗셈 (2)
http://karmainearth.tistory.com/150
http://karmainearth.tistory.com/156

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.