おそらく非常に簡単な質問ですが、複雑すぎるように見えるこの実装を思いつきました...
unsigned int x;
unsigned int z;
unsigned int makeXMultipleOfZ(const unsigned x, const unsigned z) {
return x + (z - x % z) % z;
//or
//return x + (z - (x + 1) % z - 1); //This generates shorter assembly,
//6 against 8 instructions
}
- if文は避けたい
- これが役立つ場合、z は 2 のべき乗になると安全に言えます。
私の場合z=4
(モジュロ演算をビット演算子に置き換えることができることはわかってい&
ます)、より少ない手順で実装できるかどうか疑問に思っていました。