C++:奇怪的除法输出

Eda*_*ame 1 c++ division

我有以下代码:

    int x = arr[arr.size() -1] - arr[0];
    int n = arr.size();
    int dx = x/n;
    int dy = (arr[arr.size() -1] - arr[0])/arr.size();
    std::cout << dx << "  " << dy << std::endl;
Run Code Online (Sandbox Code Playgroud)

当我的arr = [15, 13, 12],我得到了dx = -1,但是dy = 1431655764( arr is vector<int>)

为什么dxdy不同?谢谢!

son*_*yao 6

为什么dxdy不同?

对于dy,请注意 的返回类型std::vector::sizestd::vector::size_type,它是一个无符号整数类型。然后的结果(arr[arr.size() -1] - arr[0])/arr.size()也是无符号的。结果溢出,然后分配给dywith 类型int

无符号整数算术总是以2 n执行 ,其中 n 是该特定整数中的位数。例如,对于unsigned int补充一个UINT_MAX给人?0?,并从一个中减去?0?UINT_MAX

对于dxarr.size()首先分配给n(其类型为int),然后计算为x/n,其结果int也是。然后将结果分配给dx,一切都很好。