gpt4 book ai didi

c++ - 按位运算符和位操作(没有解决方案?)

转载 作者:太空狗 更新时间:2023-10-29 21:34:09 24 4
gpt4 key购买 nike

我一直在绞尽脑汁想出一个解决方案,但我卡住了。

我有一个函数,这个函数接受输入(0b00b10b10)并设置某个变量的位- 或者至少应该如此。

它正在更改的值有两种状态:0b1000b101。我想从输入中设置相应的位。这对于真位来说很容易,但对于假位来说很棘手。所有场景的一些伪代码:

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;
}

此代码的问题在于第 3 位(最左边的一位)始终为真。

这可能吗?

编辑:

这是同一个问题,只是提出了不同的方式(这将导致不同的答案)。

函数接受一位的输入。我想取最左边的位并将该位和仅该位与另一个变量进行比较。例如input = 0b100b101 的第二位 0b00 相比,因为 0b10 的最左边位是第二个。

在极少数情况下,不变的位可能会改变 :P(虽然不是我的),所以 0b0010b000 可能是它的值。出于这个原因,我不能创建一个动态掩码并只比较我的位。解决我的问题的最好方法是回答这个替代问题。非常感谢你们的帮助,伙计们!

最佳答案

第 1 步:屏蔽掉低两位。

var &= 0b100;

第二步:通过或运算将低两位赋值。

var |= input;

请注意,您可能需要根据实际数据类型在实际代码库中更改步骤 1 中的位掩码。

关于c++ - 按位运算符和位操作(没有解决方案?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47787303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com