给出这个例子:
std::vector<int> numbers = {5,6,7}; //size is 3
int i = -1;
std::cout << i % 3 <<"\n"; // output: -1
std::cout << i % numbers.size() << "\n"; // output: 0
基本上在两个语句中 im processing -1 % 3 但编译器输出不同的数字。我不明白这个结果,也许有人可以向我解释一下。
编辑作为@Chris、@Keith Thompson @AnT 建议的片段
std::cout << std::numeric_limits<std::size_t>::max() % 3 <<"\n"; //output: 0
std::cout << i % numbers.size() << "\n"; // output: 0
打印预期的输出。感谢大家的宝贵建议!
最佳答案
i % 3
是您所期望的,自 C++11 以来,它定义了语义而不是实现定义的(如果我没记错的话)结果。
numbers.size()
具有无符号类型 (std::size_t
)。假设 size_t
与 int
一样大或更大,i
在执行操作之前被转换为相同的无符号类型。 i
获取的值将是该类型的最大值,对您来说它看起来可以被 3 整除。
关于c++ - 模运算符 (%) 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29269571/