gpt4 book ai didi

c++ - C++:奇怪的除法输出

转载 作者:行者123 更新时间:2023-12-01 15:11:09 25 4
gpt4 key购买 nike

我有以下代码:

    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不同?谢谢!

最佳答案

Why dx and dy are different?



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

Unsigned integer arithmetic is always performed modulo 2n where n is the number of bits in that particular integer. E.g. for unsigned int, adding one to UINT_MAX gives ​0​, and subtracting one from ​0​ gives UINT_MAX.



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

关于c++ - C++:奇怪的除法输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59418720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com