int和无符号混用
int和无符号混用
在使用for循环的时候,出现了一个问题,代码如下:
// st.size() 为 0 ,k = 9
for (i = 1 ; i <= 9 - (k - st.size() + 1); i++) {
st.push_back(i);
//cout << i << " "<< st.size() << "|" << endl;
surplus -= i;
/*if (surplus < 0) {
st.pop_back();
surplus += i;
return;
}*/
backtracking(k, surplus, i + 1);
st.pop_back();
surplus += i;
}
计算出来 1 < -1 循环引应该跳出来才对,但是惊奇的进去了,我看了好久好久好久,终于看到了原因:
s.size()函数返回值的实际类型是string::size_type,该类型是一个无符号整型数。在表达式中混用unsigned int与int可能产生意想不到的结果。
- 也就是说 其实他的运算结果并非我们想象的那样,但是我还是有些疑惑的是,为什么vs给出的计算结果是按我想象中的给的?
这是我很疑惑的点,所以我做了测试:
但是根据上面的解释,我调试的时候并没有注意到判断的类型是unsigned类型,所以出现了这样的错误。
我进行强制转化,就没出现上述不能理解的,莫名奇妙的进入循环的问题,如下:
// st.size() 为 0 ,k = 9
for (i = 1 ; i <= 9 - (k - (int)st.size() + 1); i++) {
st.push_back(i);
//cout << i << " "<< st.size() << "|" << endl;
surplus -= i;
/*if (surplus < 0) {
st.pop_back();
surplus += i;
return;
}*/
backtracking(k, surplus, i + 1);
st.pop_back();
surplus += i;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!