我一直在努力想出一个解决方案,但却卡住了。
我有一个函数,该函数接受输入(0b0
、0b1
或0b10
),并设置某个变量的位 - 或者至少应该这样做。
它正在更改的值有两种状态:要么是0b100
,要么是0b101
。我想设置相应的位来匹配输入。这对于真正的位很容易,但对于假的位则很棘手。以下是所有方案的伪代码:
if (var == 0b100 && input == 0b0) { do nothing } // bit already set
if (var == 0b101 && input == 0b0) { var = 0b100 } // bit is different, so we set it.
if (var == 0b100 && input == 0b1) { var = 0b101 } // bit is different, so we set it.
if (var == 0b101 && input == 0b1) { do nothing } // bit is already set
if (var == 0b100 && input == 0b10) { var = 0b110 } // bit is never set, so set it
if (var == 0b101 && input == 0b10) { var = 0b110 } // bit is never set, so set it
我不想通过为每种可能性创建单独的语句来欺骗,我希望有一个函数可以实现这一点。以下是我拼凑出来的函数,但显然它不能正常工作:
if ( var ^ input )
{
var ^= input;
}
这段代码的问题在于第三位(最左侧的一位)总是为真。
这真的可能吗?
编辑:
以下是同样的问题,只是提出了不同的方式(将导致不同的答案)。
一个函数需要输入一个二进制位。我想要取最左边的一位并将该位与另一个变量进行比较。例如,对比
0b101
的第二位0b00
和input = 0b10
的最左边的一位,因为0b10
的最左边的一位是第二个位置。在极少数情况下,不变的位可能会改变:P(不是由我引起),因此
0b001
或0b000
可能是它的值。因此,我不能创建一个动态掩码并仅比较我的位...解决我的问题的最佳方法是回答这个替代问题。非常感谢你们的帮助!
var = 0b100 | input
。 - Some programmer dudevar = 0b100 + input
。这样对吗? - Cris Luengo