在给定值处创建溢出



如果一个无符号字节溢出,它从 255 变为 0,反之亦然 -1 给出 255。

是否可以让它溢出例如 200?不使用 if 语句。

Overflow 相当简单:

unsigned int a = 150, b = 150;
a += b; // do an operation
a %= 200; // wrap it

但是,对于下溢,它有点困难(请参阅orlp的答案)。

为了在多次使用此变量时不那么容易出错,在运算符重载C++,您可以创建一个类来模拟整数类型,该类型在每次操作后使用运算符重载进行包装。

取模运算符可以做你想做的事,对负值有一些技巧:

int wrap(int x, int n) {
    return x < 0 ? ((x % n) + n) % n : x % n;
}
// wrap(205, 200) == 5
// wrap(-1, 200) == 199

除非你愿意学习汇编,否则由于几个原因,这样的行动是不可能的。

  1. 所有类型,如 char、short、int 等,都是由解析器内置和预定义的。
  2. 200不是2的幂;计算机用二进制表示数字。

注意:上述情况仅在您想要隐式溢出时才适用;modulas 允许您执行显式溢出。

最新更新