我可以在C/ c++中指定是否封顶或溢出整数吗?

Can I specify whether to cap or overflow integers in C/C++?

本文关键字:溢出 整数 是否 c++ 我可以      更新时间:2023-10-16

我可以选择是否在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已经说过的,有符号整数溢出是未定义的行为。