在给定值处创建溢出
Create an overflow at a given value
如果一个无符号字节溢出,它从 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 允许您执行显式溢出。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 创建具有未定义溢出的无符号 int
- 用管道在C++中创建调度队列/线程处理程序:FIFO溢出
- 创建DLL导出对象时发生堆栈溢出错误
- 在给定值处创建溢出
- 我一直得到堆栈溢出错误,并试图修复这个3天.我正在为cd创建一个媒体库
- 无法创建数组大小 [300][300] 的二维数据结构 - >堆栈溢出
- 如果从文件中创建的地形大于128*128,则会产生堆栈溢出错误
- 如何创建无限递归,这将抛出堆栈溢出异常