2

我可以选择是否在 C/C++ 中限制或溢出整数值?还是那些编译依赖?

4

3 回答 3

3

您所说的“封顶”称为“饱和度”。数字信号处理器 (DSP) 支持硬件饱和是很常见的,但大多数微处理器自然会溢出和回绕。支持 DSP 扩展(例如 MMX)的处理器也支持饱和。

饱和度的语言支持通常由编译器扩展、内在函数和库提供。在 C++ 中也许可以创建一个用于饱和算术类型的模板类。

从我对这个问题的回答:

ISO/IEC JTC1 SC22 WG14 N1169编程语言 - C - 支持嵌入式处理器的扩展)指定_Sat用于饱和数据类型的类型限定符。我从未尝试在任何编译器中使用它,但它包含在GCC 4.x 文档中。

VC++ 2003 及更高版本支持允许饱和算术的MMX 内在函数。

请注意,在没有硬件支持饱和算术的处理器上,使用它可能会影响性能。

于 2013-05-26T10:23:51.843 回答
1

“溢出”无符号整数类型是由 C 和 C++ 标准规定的明确定义的行为。(对于吹毛求疵的人:我知道它在技术上没有被定义为溢出,但这不是适合大多数人真正感兴趣的定义。)

另一方面,溢出有符号整数类型是未定义的行为。什么事情都可能发生。

于 2013-05-26T10:05:28.167 回答
0

正如詹姆斯已经说过的那样,有符号整数溢出是未定义的行为。请参阅此处https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow了解一些想法来处理它。

于 2013-05-26T13:15:43.370 回答