微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在返回有符号类型的函数的 return 语句中减去无符号值

如何解决在返回有符号类型的函数的 return 语句中减去无符号值

我遇到过类似这样的简化代码

__int64 fun(unsigned __int64 x,unsigned __int64 y)
{
    return x - y;
}

在 Visual Studio 中,即使 y>x 并且我们有适当的负值,它也能正常工作。但这是 UB 还是有效情况,所有其他编译器也会正确处理吗?

解决方法

它永远不是UB。在上一个 C++ 标准中,它始终是明确定义的:

结果是与源整数模2N一致的目标类型的唯一值,其中N是宽度目标类型。

在以前的一些标准中,它可能是实现定义的:

如果目标类型是有符号的,如果可以用目标类型(和位域宽度)表示,则值不变;否则,该值是实现定义的。

然而,在实践中,每个实现都以2N为模。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。