如果一个无符号字节溢出,它从 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
除非你愿意学习汇编,否则由于几个原因,这样的行动是不可能的。
- 所有类型,如 char、short、int 等,都是由解析器内置和预定义的。
- 200不是2的幂;计算机用二进制表示数字。
注意:上述情况仅在您想要隐式溢出时才适用;modulas 允许您执行显式溢出。