2進桁数計算の便利さ
昔、わんくまブログで書いた
この2進桁数を高速に求める関数
int binaryDigit(unsigned int val) { int digit = 0; digit += (((val >> 16) + 0xFFFF) & 0x10000) >> 12; digit += (((val >> digit) + 0xFF00) & 0x10000) >> 13; digit += (((val >> digit) + 0xF0) & 0x100) >> 6; digit += (((val >> digit) + 0xC) & 0x10) >> 3; digit += (((val >> digit) + 0x2) & 0x4) >> 2; return digit + 1; }
が意外と便利。
OpenGL ES のテクスチャの縦横のサイズは2のべき乗じゃないとダメなので、そうするための関数が、
unsigned int floor(unsigned int val) { return 1 << binaryDigit(val - 1); }
こんなに簡単に書けたり。
いやまあ、binaryDigit 自体はどんな内容でもいいんだけど……。