我能选择在C/C++中是封顶还是溢出整数值吗?或者它们是依赖于编译的吗?
发布于 2013-05-26 18:23:52
你所说的“封顶”被称为“饱和度”。数字信号处理器(DSP)通常支持硬件饱和,但大多数微处理器自然会溢出和回绕。支持DSP扩展的处理器,例如MMX,也支持饱和。
饱和的语言支持通常是通过编译器扩展、内部函数和库来实现的。在C++中,也许可以为饱和算术类型创建一个模板类。
从我对this question的回答
ISO/IEC JTC1 SC22 WG14 N1169 (编程语言-支持嵌入式处理器的C扩展)为饱和数据类型指定了
_Sat类型限定符。我从未尝试在任何编译器中使用它,但它包含在GCC 4.x documentation中。
VC++ 2003及更高版本支持允许饱和算法的MMX intrinsics。
请注意,在没有硬件支持饱和算术的处理器上,使用它可能会影响性能。
发布于 2013-05-26 18:05:28
“溢出”无符号整数类型是C和C++标准规定的定义良好的行为。(对于吹毛求疵的人:我知道它在技术上没有被定义为溢出,但这不是大多数人真正感兴趣的定义。)
什么事都有可能发生。
发布于 2013-05-26 21:15:43
正如James已经说过的,它的带符号整数溢出是未定义的行为。有关如何处理它的一些想法,请参阅此处的https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow。
https://stackoverflow.com/questions/16758082
复制相似问题