有人可以用C++解释这个简单程序的输出吗?
在我们的代码库中调试问题时,我偶然发现了一个与下面的示例问题非常相似的问题
#include <iostream>
#include <vector>
int main() {
std::vector<int> v;
int MAX = 100;
int result = (v.size() - 1) / MAX;
std::cout << result << std::endl;
return 0;
}
我希望程序的输出应该是 0 但它是 -171798692。
有人可以帮助我理解这一点吗?
回答
v.size()返回一个无符号值std::vector::size_type。这通常是size_t.
算术无符号值环绕,并且(v.size() - 1)会0xffffffffffffffff(18446744073709551615),如果您size_t是64位长。
将此值除以100收益率0x28F5C28F5C28F5C(184467440737095516)。
然后,这个结果被转换为int。如果您的int长度为 32 位并且转换是通过简单的截断完成的,则该值将为0xF5C28F5C.
这个值代表-171798692,你得到的,在二进制补码中。