C++ 类型转换问题

AFP*_*AFP 0 c++ gcc casting visual-studio

我正在尝试使用以下 C++ 代码将 a 类型转换float为:unsigned char

#include <iostream>
int main()
{
        
    std::cout << int((unsigned char)((float)-10)) << "\n";
    std::cout << int((unsigned char)((float)300)) << "\n";
     
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会 12.1 输出:

0
255
Run Code Online (Sandbox Code Playgroud)

可以在这里尝试。它将值很好地限制为0255,这就是我期望在任何操作系统中得到的结果。但是,当我在 Visual Studio 2022 中尝试相同的代码时,就会出现问题,可以在此处尝试。

Visual Studio 输出

246
44
Run Code Online (Sandbox Code Playgroud)

在我看来,246实际上是256-10,第二个输出44300-256。我可以知道为什么 Visual Studio 会产生不同的结果吗?

如何让这个简单的跨平台转换?

n. *_* m. 10

浮点积分转换 [conv.fpint]

  1. 浮点类型的纯右值可以转换为整数类型的纯右值。转换截断;也就是说,小数部分被丢弃。如果截断值无法在目标类型中表示,则行为未定义

  • 我总是忘记这个警告。+1 (2认同)