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;
		}

posted @ 2023-02-20 17:24  jiumaohappyboy  阅读(22)  评论(0编辑  收藏  举报