int main(int argc, char* argv[])
{
uint64_t num64 = 0x1122334455667788;
char* p1 = 0;
char* p2 = 0;
int n1 = 0;
int n2 = 0;
printf("%d %d\r\n", sizeof(num64 + p1 - p2), sizeof(num64 + n1 - n2));
return 0;
}
我在 vs2019 上编译成 Win32/Release 运行这段代码,会输出 4 8
看起来笫一个运算结果被转换成了 int 型,而笫二个运算是 uint64_t 型
理论上来说一个长类型(uint64_t)和一个短类型(int)的运算结果是长类型,结果应该两个都是 8 。
但是笫一个结果是 4,想了很久没算明白,请大佬们指点下谢谢。
{
uint64_t num64 = 0x1122334455667788;
char* p1 = 0;
char* p2 = 0;
int n1 = 0;
int n2 = 0;
printf("%d %d\r\n", sizeof(num64 + p1 - p2), sizeof(num64 + n1 - n2));
return 0;
}
我在 vs2019 上编译成 Win32/Release 运行这段代码,会输出 4 8
看起来笫一个运算结果被转换成了 int 型,而笫二个运算是 uint64_t 型
理论上来说一个长类型(uint64_t)和一个短类型(int)的运算结果是长类型,结果应该两个都是 8 。
但是笫一个结果是 4,想了很久没算明白,请大佬们指点下谢谢。
