Clean, efficient algorithm for wrapping integers in C++

后端 未结 14 2026
慢半拍i
慢半拍i 2020-12-13 09:21
/**
  * Returns a number between kLowerBound and kUpperBound
  * e.g.: Wrap(-1, 0, 4); // Returns 4
  * e.g.: Wrap(5, 0, 4); // Returns 0      
  */
int Wrap(int con         


        
14条回答
  •  粉色の甜心
    2020-12-13 10:14

    I would suggest this solution:

    int Wrap(int const kX, int const kLowerBound, int const kUpperBound)
    {
        int d = kUpperBound - kLowerBound + 1;
        return kLowerBound + (kX >= 0 ? kX % d : -kX % d ? d - (-kX % d) : 0);
    }
    

    The if-then-else logic of the ?: operator makes sure that both operands of % are nonnegative.

提交回复
热议问题