我可以在C/ c++中指定是否封顶或溢出整数吗?
Can I specify whether to cap or overflow integers in C/C++?
我可以选择是否在C/c++中封顶或溢出整数值吗?还是那些编译依赖?
你所说的"封顶"就是"饱和"。数字信号处理器(DSP)通常支持硬件饱和,但大多数微处理器自然溢出和环绕。支持DSP扩展(例如MMX)的处理器也支持饱和。
对饱和的语言支持通常是由编译器扩展、内部函数和库提供的。在c++中也许可以为饱和算术类型创建一个模板类。从我对这个问题的回答:
ISO/IEC JTC1 SC22 WG14 N1169 (编程语言- C -支持嵌入式处理器的扩展)指定了
_Sat
类型饱和数据类型的限定符。我从来没有试过用它任何编译器,但它包含在GCC 4中。x文档。vc++ 2003以后支持允许饱和的MMX内部函数算术。
请注意,在没有硬件支持饱和算法的处理器上,使用它可能会影响性能。
" overflow " unsigned整数类型是由C和c++标准规定的良好定义的行为。(对于吹毛求疵的人:我知道从技术上讲,它并没有被定义为溢出,但这不是大多数人真正感兴趣的定义。)
另一方面,溢出有符号整数类型是未定义的行为。一切皆有可能正如James已经说过的,有符号整数溢出是未定义的行为。
相关文章:
- 整数溢出,最大值为 pow(10,19)
- 模函数,避免C++整数溢出
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 将字符串转换为整数类型T,检查是否存在溢出
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 结构上溢出的整数加法
- 我很难理解这些关于检测整数溢出的评论
- 检测 32 位整数溢出
- 32 位整数缩放,无溢出
- 如何在没有整数溢出的情况下找到n%(k*k)
- C 中俄罗斯农民算法中的整数溢出
- 快速方法可以将整数乘以适当的分数,而无需浮点或溢出
- C 和 C++ 中的整数计算溢出
- 检查Android NDK COD中的整数溢出
- 是否有一些有意义的统计数据来证明保持有符号整数算术溢出未定义是合理的
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 如何修复整数溢出警告
- 我可以在C/ c++中指定是否封顶或溢出整数吗?