c++ - 为什么 C++ 模运算符对 -1 % str.size() 返回 0?

标签 c++ implicit-conversion modulus mod

我很困惑为什么下面的代码会产生这个输出:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int i = -1;
    string s = "abc";
    int j = s.size();
    int x = 1 % 3;
    int y = i % j; 
    int z = i % s.size(); 
    cout << s.size() << endl; // 3
    cout << x << endl;        // 1
    cout << y << endl;        // -1
    cout << z << endl;        // 0
}

为什么 z = 0?跟选角有关系吗?

最佳答案

这里真正发生了什么:

int z = i % s.size();

i被转换成size_t,因为另一边s.size()size_t。与 int 不同,size_t 是无符号的;也就是说,该值被解释为正数。

检查这一行的输出:

std::cout << (size_t)-1 << std::endl;

看看 -1 变成了什么。

关于c++ - 为什么 C++ 模运算符对 -1 % str.size() 返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61299317/

相关文章:

c++ - scoped_lock 如何避免发出 "unused variable"警告?

c++ - 使用集合来存储自定义类,只有第一个插入有效

c++ - makefile 编译所有子目录中的所有 cpp 文件

C++:从指向类的指针访问成员结构的语法

c++ - 隐式转换在现代 C++ 中是好是坏?

c++ - 为什么编译器选择这个模板函数而不是重载的非模板函数?

javascript - AngularJS 将字符串转换为引用 $scope 中对象的对象/数组

python - 在 python 条件语句中使用模数运算符

c++ - 当操作数之一为负值时的模运算c++

java - 在 java 中,我想做 102%100 并将余数作为 02 而不是 2..我该怎么做?