ビット演算で整数割り算
ビット演算と引き算を使った整数の割り算のコード。
ただし、31bit符号なし整数 ÷ 15bit符号なし整数 という制限つき。
// 31bit unsigned int / 15bit unsigned short
unsigned short divsu(unsigned int x, unsigned short y)
{
for (int i = 0; i < 16; i++)
{
x <<= 1;
if (x >= (unsigned int)y << 16)
{
x -= (unsigned int)y << 16;
x |= 1;
}
}
return x;
}
参考:ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか