//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
*/