Clean, efficient algorithm for wrapping integers in C++

后端 未结 14 2025
慢半拍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 09:54

    Actually, since -1 % 4 returns -1 on every system I've even been on, the simple mod solution doesn't work. I would try:

    int range = kUpperBound  - kLowerBound +1;
    kx = ((kx - kLowerBound) % range) + range;
    return (kx % range) + kLowerBound;
    

    if kx is positive, you mod, add range, and mod back, undoing the add. If kx is negative, you mod, add range which makes it positive, then mod again, which doesn't do anything.

提交回复
热议问题