C++ 等秩无符号到有符号转换的现实可移植性

C++ 等秩无符号到有符号转换的现实可移植性,c++,c++11,portability,signed,C++,C++11,Portability,Signed,以下面的代码为例 #include <iostream> int main() { unsigned char i = 128; signed char j = i; std::cout << static_cast<int>(j) << '\n'; } #包括 int main(){ 无符号字符i=128; 符号字符j=i; std::我是否认为这实际上是一个错误的问题。任何针对使用一个补码的CPU体系结构的编译器都必

以下面的代码为例

#include <iostream>

int main() {
    unsigned char i = 128;
    signed char j = i;
    std::cout << static_cast<int>(j) << '\n';
}
#包括
int main(){
无符号字符i=128;
符号字符j=i;

std::我是否认为这实际上是一个错误的问题。任何针对使用一个补码的CPU体系结构的编译器都必须使用一个补码。当然,在积极维护的现实世界中,存在使用一个补码的CPU(例如unisys Dorado)和其他仍然支持一个补码的CPU(如Intel)(同时提供与二的补充有关的其他说明)它所需要的是一个客户想要一个C++编译器,它的目标是一个补码机,一个愿意实现它的厂商,你的断言会变成假。现在它是不是真的。我的断言已经是正式的错误了。我不在乎它是假的。我关心我在实践中是否会有这个模式的问题。你能吗?举一个C++17编译器的例子,它在Intel One Complete机器上产生不同的行为?@JonasMüller在在线可用的GCC、CLang zapcc和MSVC编译器上运行您的代码,无论是旧版本还是新版本,它们都给出了-128。我很久没有在野外遇到过比上面提到的任何东西。为什么y会这样做你不只是编写简单的可移植表达式并让编译器对其进行优化吗?@JonasMüller:想必是
u>127?u-256:u
,这就是。