[英]Modulo Operator (%) gives divergent results
鉴于此示例:
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
打印预期的输出。 感谢大家的有益建议!
i % 3
是你所期望的,因为C ++ 11定义了语义而不是实现定义(如果我没记错)结果。
numbers.size()
具有无符号类型( std::size_t
)。 假设size_t
与int
或更大一样大,则在执行操作之前, i
将转换为相同的无符号类型。 i
得到的值将是该类型的最大值,它看起来可以被3整除。
问题是负数的百分比在C ++中没有明确定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.