uint32_t a = -1; // 11111111111111111111111111111111
int64_t b = (int64_t) a; // 0000000000000000000000000000000011111111111111111111111111111111
int32_t c = -1; // 11111111111111111111111111111111
int64_t d = (int64_t) c; // 1111111111111111111111111111111111111111111111111111111111111111
从上面的观察来看,似乎只有原始值很sign
重要。即,如果原始的 32 位数字是无符号的,则将其转换为 64 位值将添加0's
到其左侧,而不管目标值是有符号还是无符号,并且;
如果原始 32 位数字是有符号且为负数,则将其转换为 64 位值将添加1's
到其左侧,而不管目标值是有符号还是无符号。
上述说法正确吗?