ホーム 道しるべ 憩いの広場 濃緑空間 濃緑研の日記

符号付き除算1
ホーム ] 上へ ] [ 符号付き除算1 ] 符号付き除算2 ]

 

除算の紹介では符号なしの除算(DIV)を使用しました。

次は符号付き除算を行います。
符号付き除算でb=0x40000000だと、除算結果が0xccccccccで、符号ビット(一番左のビット)にオーバフローを起こすことになり、オーバーフローエラーが発生します(好奇心のある人は試してみて下さい)。

そこでオーバーフローが発生しないようにb=0x2000000 (e=5) としました。

main()
{
    int         a=0x50000000;    // e=4 f=0x0.101 0000        :               5.0
    int        b=0x20000000;     // e=5 f=0x0.010 0000        :               4.0
    int        c;    // 0x66666... //  e=1 f=0x.0.110 0110 0110 0110     0.8
    int        d;
    char    buf[80];

    d = 0;
    _asm {
        mov         eax,d
        mov         edx,b
        idiv        a
        mov         c,eax
        mov         d,edx
    }

sprintf(buf,"%8x %8x %8x %8x",a,b,c,d);
    MessageBox(GetDesktopWindow(), buf,"Test 3DNow!",MB_OK);
}

    int         a=0x50000000;    // e=4 f=0x0.101 0000        :               5.0
    int        b=0x20000000;     // e=5 f=0x0.010 0000        :               4.0

b/aですから小数点の位置は 5-4=1となります。

    int        c;    // 0x66666... //  e=1 f=0x.0.110 0110 0110 0110     0.8