Mic*_*ang 2 c++ math types division
我有这段测试代码(有很多其他材料;但是,它非常密集,可能与这个问题无关),这已经产生了一些莫名其妙的输出.编译时,此块:
cout << team1[m].rating << endl;
cout << team2[n].rating << endl;
cout << team1.size() << endl;
cout << team2.size() << endl;
cout << (team2[n].rating - team1[m].rating) / team2.size() << endl;
cout << (team1[m].rating - team2[n].rating) / team1.size() << endl;
Run Code Online (Sandbox Code Playgroud)
产生输出:
10
30
2
2
10
2147483638
Run Code Online (Sandbox Code Playgroud)
'team1'和'team2'都是类型vector<player>(没有反斜杠),'player'结构如下所示:
struct player {
string name;
int rating;
player(string Name, int Rating) :
name(Name), rating(Rating) {}
};
Run Code Online (Sandbox Code Playgroud)
team1.size()并且team2.size()是unsigned(size_t) - 将您的代码更改为:
cout << (team2[n].rating - team1[m].rating) / static_cast<int>(team2.size()) << endl;
cout << (team1[m].rating - team2[n].rating) / static_cast<int>(team1.size()) << endl;
Run Code Online (Sandbox Code Playgroud)
(team1[m].rating - team2[n].rating)等于-20.这个表达式结果被提升到unsigned int根据混合表达式的规则并除以team1.size(),得到的2147483638是unsigned int等价的signed int -10.