//2バイト割り算 unsigned変数の利用
#include <stdio.h>
int main()
{
short int x00,x10;
short int x0,x1,x2; //x0÷x1=x2 あまり x0を作る
short int x3,xt;
int opecase;
printf("x00 x01 = ");
scanf("%hd %hd",&x00,&x10);
x0=x00;
x1=x10;
xt=x10;
if (0<x0) {
if (0<x1) {
opecase=0; // P/P
} else {
opecase=1; // P/M
x1=-x1;
}
} else {
if (0<x1) {
opecase=2; // M/P
x0=-x0;
} else {
opecase=3; // M/M
x1=-x1;
x0=-x0;
xt=-xt;
}
}
x2=0;
x3=1;
while (x1<x0) {
x1<<=1;
x3<<=1;
}
while (x3!=0) {
if(x1<=x0) {
x0-=x1;
x2+=x3;
}
x1>>=1;
x3>>=1;
}
if (opecase==0) {
} else if (opecase==1) {
x2=-x2;
} else {
if (0<x0) {
x0=xt-x0;
x2++;
}
if (opecase==2) {
x2=-x2;
}
}
printf("x00,x10,x2,x0= %04hx, %04hx, %04hx, %04hx\n",x00,x10,x2,x0);
printf("x00,x10,x2,x0=%6d,%6d,%6d,%6d\n",x00,x10,x2,x0);
return 0;
}
/*
x00 x01 = 11 4
x00,x10,x2,x0= 000b, 0004, 0002, 0003
x00,x10,x2,x0= 11, 4, 2, 3
x00 x01 = 11 -4
x00,x10,x2,x0= 000b, fffc, fffe, 0003
x00,x10,x2,x0= 11, -4, -2, 3
x00 x01 = -11 4
x00,x10,x2,x0= fff5, 0004, fffd, 0001
x00,x10,x2,x0= -11, 4, -3, 1
x00 x01 = -11 -4
x00,x10,x2,x0= fff5, fffc, 0003, 0001
x00,x10,x2,x0= -11, -4, 3, 1
*/