2006年06月05日

ビット演算で整数割り算

ビット演算と引き算を使った整数の割り算のコード。
ただし、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;
}

参考:ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

Posted by Akihiro at 15:36 | Comments (0)