C++:奇怪的除法输出
Posted
技术标签:
【中文标题】C++:奇怪的除法输出【英文标题】:C++: strange division output 【发布时间】:2019-12-20 01:03:55 【问题描述】:我有以下代码:
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>
)
为什么dx
和dy
不同?谢谢!
【问题讨论】:
您的代码不完整 - 但我怀疑您正在做一些未定义的行为。 - 添加环绕代码。 【参考方案1】:为什么
dx
和dy
不同?
对于dy
,注意std::vector::size
的返回类型是std::vector::size_type
,是一个无符号整数类型。那么(arr[arr.size() -1] - arr[0])/arr.size()
的结果也是无符号的。结果是overflowed,然后分配给dy
,类型为int
。
无符号整数运算总是执行模2n 其中 n 是该特定整数中的位数。例如。对于
unsigned int
,将UINT_MAX
加一得到0
,从0
减去一得到UINT_MAX
。
对于dx
,首先将arr.size()
赋值给n
(其类型为int
),然后计算为x/n
,其结果也是int
。然后将结果分配给dx
,一切正常。
【讨论】:
“为什么 dx 和 dy 不同?” - 作为标题和细分来解释它很好。以上是关于C++:奇怪的除法输出的主要内容,如果未能解决你的问题,请参考以下文章