C++:奇怪的除法输出

C++: strange division output

本文关键字:除法 输出 C++      更新时间:2023-10-16

我有以下代码:

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;

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

为什么dxdy不同?谢谢!

为什么dxdy不同?

对于dy,请注意std::vector::size的返回类型是std::vector::size_type,这是一个无符号整数类型。那么(arr[arr.size() -1] - arr[0])/arr.size()的结果也是未签名的。结果溢出,然后分配给类型为intdy

无符号整数算术总是以模 2 n 执行,其中n是该特定整数中的位数。 例如,对于unsigned int,在UINT_MAX上加一得到​0,从​0​中减去一得到UINT_MAX

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