c++ - 模运算符 (%) 给出不同的结果

标签 c++ c++11

给出这个例子:

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_tint 一样大或更大,i 在执行操作之前被转换为相同的无符号类型。 i 获取的值将是该类型的最大值,对您来说它看起来可以被 3 整除。

关于c++ - 模运算符 (%) 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29269571/

相关文章:

c++ - 获取列名postgres

c++ - 用鼠标单击两个不同的图像 C++ 打开不同的 Urls

c++ - std::unordered_map 的哈希值

c++ - 为什么 std::priority_queue 对其容器的元素进行排序?

c++ - 将 C 中的按位语句转换为 Delphi

c++ - GCC 标准库 XCode 4.5

c++ - 使用自定义Makefile而不是qmake交叉编译Ubuntu-Win7

c++ - 在这种情况下,while 循环是如何工作的?

c++ - `static constexpr` 在常量表达式中调用的函数是...错误?

c++ - 可以优化智能指针吗?