位技巧和魔术
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";
我正在用 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";