当一个是size_t类型而另一个是<0

Why mod operation return 0 when one is size_t type and the other is <0?

本文关键字:类型 另一个 lt size 一个      更新时间:2023-10-16

有c++代码:

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

但是如果将size_t更改为int:

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

为什么会发生这种情况,任何人都可以解释,谢谢!

底线是您的第一个代码片段,可以归结为-1 % size_t{3},并从将-1转换为类型size_t开始,如果是32位程序,则产生FFFF FFFF;如果是64位程序,产生FFFF。两者都是3的倍数,所以mod运算符返回0。在另一种情况下,有两个(带符号的)int值,-1 % 3返回-1,正如您所期望的那样。

相关文章: