c++ - 为什么条件为假时仍然执行if语句?
问题描述
代码如下所示,value-row+i 显然是-1。但是下面的语句仍然执行。问题是第一个如果在放大功能中。
void enlarge(queue<vector<int>> &slv, vector<int> &v, int n)
{
auto row = v.size();
int rec = 0;
for (int i = 0; i < row; ++i)
{
int value = v[i];
rec |= 1 << value;
//int s = (value - row);
if (value - row + i >= 0)
rec |= 1 << (value - row + i);
if (value + row - i < n)
rec |= 1 << (value + row - i);
}
vector<int> vt;
int bitPosi = 0;
while (bitPosi < n)
{
if (!(rec & 1))
{
v.push_back(bitPosi);
slv.push(v);
v.pop_back();
}
rec >>= 1;
bitPosi++;
}
}
解决方案
我已经解决了这个问题。发生这种情况是因为 row 被声明为自动变量并被推断为 size_t。转换为 int 时,行失去精度。
推荐阅读
- react-native - 键盘启动时如何隐藏组件?
- php - belongsTo–hasOne 关系返回 null
- nativescript - NativeScript 应用程序给出“警告:陈旧文件 [....appname-Prefix.pch.gch] 位于允许的根路径之外”
- c - 使用循环查找最大数字
- kotlin - 如何使用 Chopper 发送文件?
- python - 将 pandas 数据框从宽转长
- c# - Elasticsearch + NEST:仅将标记过滤器用于比较,但不适用于分析器结果
- python-3.x - 如何在colab上保存python pptx
- python - 如何使用 Python 覆盖 Selenium 中预先存在的条目的特定字段
- powerquery - 在电源查询中,如何将数字转换为以秒为单位的持续时间?