unsigned int x1 = 0xaeb1c2aa;
unsigned int x2 = 0xaeb1c2aa;
long long r_whole = (signed long long)x1 * (signed long long)x2;
printf("r_whole = %lld\n",r_whole);
输出的结果是无符号乘法的结果:
r_whole = 8590088583138384100
而下面的程序
unsigned int x1 = 0xaeb1c2aa;
unsigned int x2 = 0xaeb1c2aa;
int xx1 = x1;
int xx2 = x2;
long long r_whole = (signed long long)xx1 * (signed long long)xx2;
printf("r_whole = %lld\n",r_whole);
输出的事有符号乘法的结果:
r_whole = 1860719719092984036
第一段程序里我不是对 x1 进行强制类型转换了吗
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.