我想知道从较小的有符号整数到较大的无符号整数的类型转换。似乎编译器首先将有符号整数转换为与目标大小相同的有符号整数,然后再转换为无符号整数。
请注意以下 C++ 代码:
#include <assert.h>
#include <iostream>
typedef int sint;
typedef unsigned __int64 luint;
int main(int, char**) {
assert(sizeof(luint) > sizeof(sint));
sint i = -10;
luint j = i;
std::cout << std::hex << j;
}
在 Visual C++ 下,这会产生:fffffffffffffff6
.
这是我喜欢的。我可以确定所有编译器都会以这种方式运行吗?如果先将有符号整数转换为无符号整数,然后再转换为新大小,则结果将是fffffff6
.