首页 > 解决方案 > 为什么条件为假时仍然执行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++;
    }
}

标签: c++visual-studio

解决方案


我已经解决了这个问题。发生这种情况是因为 row 被声明为自动变量并被推断为 size_t。转换为 int 时,行失去精度。


推荐阅读