鉴于此示例:
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
基本上在两个语句中我处理-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
打印预期输出。感谢大家的有用建议!
答案 0 :(得分:8)
i % 3
是您所期望的,因为C ++ 11已经定义了语义而不是实现定义(如果我没记错)结果。
numbers.size()
具有无符号类型(std::size_t
)。假设size_t
与int
或更大一样大,i
在执行操作之前将转换为相同的无符号类型。值i
获取的值将是该类型的最大值,它可以被3整除。
答案 1 :(得分:0)
问题是在C ++中没有很好地定义负数的百分比。