位技巧和魔术

Bits tricks and magic

我正在用 C++ 编写一个程序,它必须尽可能地精简。我需要一些关于 if/else 语句的帮助。这是代码:

if (lines & 1 << ((d & 1) * 30 + 5 * l + c)) {
    cout << "Invalid";
} else {
    lines |= 1 << ((d & 1) * 30 + 5 * l + c);
}

我在这里做的是:验证某个位是否设置为 1,然后我算出一些东西,如果不是,我将其设置为 1。有什么方法可以将 2 行组合在一起我验证并在 if 主体中将位设置为 1 的位置?

lines & 1 << ((d & 1) * 30 + 5 * l + c)
lines |= 1 << ((d & 1) * 30 + 5 * l + c)

我在想象这样的事情:

if (lines |= .... )

它应该做的是:验证bit是否为1并进入if body,如果不是(或已经是)则将其设为1。

抱歉我的英语不好和这个愚蠢的请求,但我想不出办法,这让我发疯。

P.S: 有什么 site/calculator 可以在我输入方程式时给我一个布尔公式吗?例如:3 .. .. = -1。我需要这里的操作数和运算符。

if (lines == (lines|= mask)) cout << "Invalid";