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给出的计算结果是按我想象中的给的?
    img
    这是我很疑惑的点,所以我做了测试:
    imgimg
    但是根据上面的解释,我调试的时候并没有注意到判断的类型是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;
		}

原文链接: https://www.cnblogs.com/zhaowenrui-life/p/17138244.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    int和无符号混用

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/319287

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月24日 下午3:14
下一篇 2023年2月24日 下午3:15

相关推荐