当一个是size_t类型而另一个是<0时,为什么mod操作返回0?

sta*_*ang -1 c++

有c ++代码:

string s = "abc";
size_t len = s.length();
cout<<(-1%len)<<endl;//print 0
Run Code Online (Sandbox Code Playgroud)

但如果将size_t更改为int:

string s = "abc";
int len = s.length();
cout<<(-1%len)<<endl;//print -1
Run Code Online (Sandbox Code Playgroud)

为什么会这样,有人可以解释一下,谢谢!

Ton*_*roy 5

底线是你的第一个代码片段,归结为-1 % size_t{3}并转换-1为类型size_t,如果是32位程序则产生FFFF FFFF,如果是64位则产生FFFF FFFF FFFF FFFF.要么是3的倍数,那么mod运算符返回0.在另一种情况下,有两个(签名)int-1 % 3返回-1,正如您希望的那样.