我有以下代码:
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>)
为什么dx和dy不同?谢谢!
为什么
dx和dy不同?
对于dy,请注意 的返回类型std::vector::size是std::vector::size_type,它是一个无符号整数类型。然后的结果(arr[arr.size() -1] - arr[0])/arr.size()也是无符号的。结果溢出,然后分配给dywith 类型int。
无符号整数算术总是以2 n为模执行 ,其中 n 是该特定整数中的位数。例如,对于
unsigned int补充一个UINT_MAX给人?0?,并从一个中减去?0?给UINT_MAX。
对于dx,arr.size()首先分配给n(其类型为int),然后计算为x/n,其结果int也是。然后将结果分配给dx,一切都很好。