1

位掩码未返回正确的值

我正在尝试解决这种情况,我总是得到 8 作为返回值。我不确定读取位操作的条件。

int outputbyte[3] = {10,11,12};
int result;
result = (outputbyte[1] & 11)?8:0;
printf("\nMasked value is: %d", result);

我不明白这种情况是如何变得真实的(输出字节 [1] 和 11)?

4

1 回答 1

1

这里

int outputbyte[3] = {10,11,12};
result = (outputbyte[1] & 11)?8:0;

这个

result = (outputbyte[1] & 11)?8:0  /* (outputbyte[1] & 11) results in true hence 8 assigned to result */

是三元运算符,即第一个操作数 1即被(outputbyte[1] & 11)?8:0)评估,如果结果为非零,则操作数 2即被8分配,result否则操作数 3即被0分配给result

outputbyte[1] ==> 11   => 0000 1011
                                  & ( bitwise AND operator)
                  11   => 0000 1011
                         -----------
                          0000 1011   => 11 i.e nonzero i.e condition true i.e 11 gets assigned to result
                         -----------

我希望您知道按位与运算符的真值表&,即

A   B    A&B
------------
0   0     0
0   1     0
1   0     0
1   1     1
于 2019-08-24T07:43:16.157 回答