Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这些按位操作在做什么_C#_Bit Manipulation - Fatal编程技术网

C# 这些按位操作在做什么

C# 这些按位操作在做什么,c#,bit-manipulation,C#,Bit Manipulation,最后一行到底在做什么?总和是32个布尔值。这是一个位字段。Forced是位字段,previousSum是位字段 用通俗易懂的英语说,最后一行在做什么?(不是操作,我知道它不是强制的,用sum和它相加,然后用上一个sum和它相加)这将有选择地从两个值(sum&previousSum)中选择位,其中“on”位来自previousSum,“off”位来自sum) 由于加法运算的两个操作数的互斥位设置为1,因此加法的效果与布尔Or相同 这就像使用模具组合两个图像 要了解其工作原理,让我们使用4位值: 强

最后一行到底在做什么?总和是32个布尔值。这是一个位字段。Forced是位字段,previousSum是位字段


用通俗易懂的英语说,最后一行在做什么?(不是操作,我知道它不是强制的,用sum和它相加,然后用上一个sum和它相加)

这将有选择地从两个值(
sum
&
previousSum
)中选择位,其中“on”位来自
previousSum
,“off”位来自
sum

由于加法运算的两个操作数的互斥位设置为1,因此加法的效果与布尔Or相同

这就像使用模具组合两个图像

要了解其工作原理,让我们使用4位值:

强制=0011(和~forced=1100)
上一次总和=0110
总和=1111
~forced&sum=1100
强制和先前总和=0010


两个值中都没有位是“开”的,因此求和与或相同,其效果等于从两个有效值中选择位来构造新值。

在提供更多上下文之前无法判断。它从
sum
中获取所有未强制的位(即
~forced
中有一个1)并将该和添加到
上一个和
,从而
强制
在添加之前从
上一个和
中选择位。我正在尝试将这些位字段转换为数组,我需要将按位逻辑更改为常规逻辑…只需以二进制形式写出一些值并进行计算
~
=按位not、
&
=按位and等…这看起来像是有人想避免编写IF语句,反而让你抓狂了。建议您找到这是谁写的(在您的版本控制中使用责怪工具)并询问他们。也许您可以在回答中指出,在这种情况下,
+
|
相同,因为
强制&x
~forced&x
意味着不能有任何携带?这可能是提问者困惑的根源。因此,对于总和中的每一位。。。如果未强制求和[x],则使用上一次求和[x],否则使用上一次求和[x]?如果强制求和,则使用上一次求和,否则使用上一次求和。
uint sum = generateSum();
int forced = getForcedBitfield();
int previousSum = getPreviousSum();

sum = (~forced & sum) + (forced & previousSum);