该计划的输出应该是什么? Ubuntu C ++(4.8.4)给出了1954495122,它看起来不是正确的答案。这些位都是错误的,因为它是签名/未签名的东西。
有趣的是,如果我改变了' n'从unsigned long到unsigned int,我得到了正确答案:-17753859。
Mingw和Visual Studio都给出了相同的正确信息。答案。
很难找出该标准对此特定操作的说法,但即使它已经实施了定义'我认为答案会有某种意义。
#include <iostream>
int main(int argc, char* argv[])
{
long long s = -88769298432;
unsigned long n = 5000;
int x = (int)(s / n);
std::cout << x << std::endl;
return 0;
}
我应该注意到,我已经尝试了其他一些值,但它们似乎有效,因此这些值的工作原理并不是很明显。
而且,我想出了这些因为我试图追踪Windows和Linux之间的可移植性错误。问题是我试图找到一个向量的平均值。 &#39;&#39;以上是总和。 &#39; n&#39;是向量中的元素数(v.size(),在gcc中定义为unsigned long)。错误的答案是Linux的答案。铸造&#39; n&#39;在分母中(int)修复它。
怪异。
感谢, 马可