GCC错误?长期除以无符号长

时间:2015-07-30 04:42:34

标签: 64-bit division

该计划的输出应该是什么? 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)修复它。

怪异。

感谢, 马可

0 个答案:

没有答案