0

我正在尝试理解以下代码片段:

unsigned char state = portStates[portNumber];
int bitValue = (state >> 7) & 0x1;

它在 的最不重要的位上进行按位与 state,对吗?如果它返回真(即该位被设置),那么这个数字是奇数。否则,它是均匀的。我对么?

谢谢

4

2 回答 2

5
int bitValue = (state >> 7) & 0x1;

只需移动state7 位。然后它会删除除第一个之外的所有其他位。

因此,将值的第 7 位(在大多数系统中为 8 位的最高有效位unsigned char)转换为 0 或 1 值。它可以写成布尔表达式(使用惯用的双重否定):

int bitValue = !!(state & 0x80);

但移位和屏蔽直接给出 0 或 1 值而不转换为布尔值。

于 2018-04-18T08:29:26.970 回答
1

(state>>7) 返回通过将无符号字符“状态”移动 7 位生成的值,并添加前导零。现在用 1 执行与操作会给出状态中第七位的值。

也就是说,当状态的第七位(从右起)为 1 时,bitValue 为 1,或者换句话说,当状态 >= 128 时,bitValue 为 1。

于 2018-04-18T08:42:31.467 回答