我想知道从较小的有符号整数到较大的无符号整数的类型转换。似乎编译器首先将有符号整数转换为与目标大小相同的有符号整数,然后再转换为无符号整数。
请注意以下 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.